Spring H2嵌入式数据库

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

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

模式可以通过 H2 上的 SQL 语句来完成,但我很确定 DB_CLOSE_DELAY 必须设置为 URL 的一部分,这没有简单的钩子进入。您最好只在应用程序中设置它。properties/yml 并让 spring 自动配置它

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

试试这个

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

您可以尝试使用 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 答案

上找到了线索