Spring H2嵌入式数据库[重复]

Posted

技术标签:

【中文标题】Spring H2嵌入式数据库[重复]【英文标题】:Spring H2 embedded database [duplicate] 【发布时间】:2017-04-24 18:35:55 【问题描述】:

我想创建一个填充了测试数据的内存数据库以进行快速测试,所以我在我的配置文件中声明了这个 bean,但我也想设置这个属性:

MODE=mysql
DB_CLOSE_ON_EXIT=FALSE

但我不知道在哪里做

@Bean
public DataSource dataSource()
    return
        (new EmbeddedDatabaseBuilder())
        .setType(EmbeddedDatabaseType.H2) //.H2 
        .addScript("classpath:db/H2.schema.sql")
        .addScript("classpath:db/H2.data.sql")
        .build();

【问题讨论】:

【参考方案1】:

试试这个

@Bean
public DataSource dataSource()
    return
        new EmbeddedDatabaseBuilder()
        .setType(EmbeddedDatabaseType.H2)
        .setName("testDB;DB_CLOSE_ON_EXIT=FALSE;MODE=MySQL") 
        .addScript("classpath:db/H2.schema.sql")
        .addScript("classpath:db/H2.data.sql")
        .build();

【讨论】:

在一分钟内击败我:P 解决了我的问题。谢谢:)【参考方案2】:

您可以尝试使用EmbeddedDatabaseBuilder.setName()

@Bean
public DataSource dataSource() 
return
    new EmbeddedDatabaseBuilder()
    .setName("testdb;MODE=MySQL;DB_CLOSE_ON_EXIT=false")
    .setType(EmbeddedDatabaseType.H2) //.H2 
    .addScript("classpath:db/H2.schema.sql")
    .addScript("classpath:db/H2.data.sql")
    .build();

注意:我自己没有尝试过,但在this答案上找到了线索

【讨论】:

【参考方案3】:

另一种方法是使用属性连接数据源。这样,您可以设置可以包含附加属性的 JDBC URL。

【讨论】:

【参考方案4】:

该模式可以通过 H2 上的 SQL 语句来完成,但我很确定 DB_CLOSE_DELAY 必须设置为 URL 的一部分,这不容易挂钩。您最好在 application.properties/yml 中设置它并让 spring 自动配置它

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MySQL 将是 spring.datasource.url 附加属性可用于 schemadata

【讨论】:

以上是关于Spring H2嵌入式数据库[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Spring中使用嵌入式数据库-H2

Flyway / Spring和H2嵌入式数据库的架构相关问题

Flyway 与 Spring Boot 的集成不会在嵌入式 H2 数据库上执行迁移脚本

具有基于嵌入式文件的 H2 多租户数据库和手动迁移的 Spring 应用程序

嵌入式 h2 数据库未运行

java - 如何在java桌面应用程序中使用spring(事务)和hibernate创建嵌入式H2 DB?