Spring H2嵌入式数据库

时间:2017-04-24 18:35:56

标签: java spring spring-boot h2 embedded-database

我想创建一个内存数据库,其中填充了测试数据以进行快速测试,因此我在配置文件中声明了这个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();
}

4 个答案:

答案 0 :(得分:8)

试试这个

@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();
}

答案 1 :(得分: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回答

上找到了线索

答案 2 :(得分:1)

另一种方法是使用属性连接DataSources。这样,您可以设置可包含其他属性的JDBC URL。

答案 3 :(得分:1)

模式可以通过H2上的SQL语句完成,但我很确定DB_CLOSE_DELAY必须设置为URL的一部分,没有简单的钩子。你最好只在application.properties/yml中设置它,让spring自动配置它

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MySQL可以spring.datasource.urlschema

提供data个附加属性