如何在没有显式连接 URL 的情况下在 Spring Boot 中禁用 H2 的 DATABASE_TO_UPPER

Jon*_*nik 5 spring h2 spring-data-jpa spring-boot

我知道 H2 有一个名为 的布尔属性/设置DATABASE_TO_UPPER,您至少可以在连接 URL 中设置它,如下所示:;DATABASE_TO_UPPER=false

我想将其设置为 false,但在我的 Spring Boot 应用程序中,我没有在任何地方明确拥有 H2 连接 URL。不过,正如我在日志中看到的那样,确实有一个连接 URL:

o.s.j.d.e.EmbeddedDatabaseFactory: Shutting down embedded database: 
url='jdbc:h2:mem:2fb4805b-f927-49b3-a786-2a2cac440f44;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false'
Run Code Online (Sandbox Code Playgroud)

所以问题是,DATABASE_TO_UPPER在这种情况下告诉 H2 禁用的最简单方法是什么?在使用EmbeddedDatabaseBuilder(见下文)创建 H2 数据源时,我可以在代码中执行此操作吗?或者在application properties也许?

这是在代码中显式初始化 H2 数据库的方式:

@Configuration
@EnableTransactionManagement
public class DataSourceConfig {

    @Bean
    public DataSource devDataSource() {
        return new EmbeddedDatabaseBuilder()
                .generateUniqueName(true)
                .setType(EmbeddedDatabaseType.H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .addScripts("db/init.sql", "db/schema.sql", "db/test_data.sql")
                .build();
    }

}
Run Code Online (Sandbox Code Playgroud)

另外,我告诉 JPA/Hibernate 不要自动生成嵌入式数据库(没有这个,就会出现两个内存数据库启动的问题):

spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=none
Run Code Online (Sandbox Code Playgroud)

小智 7

你不能 w\ the generateUniqueName,但如果你打电话,setName("testdb;DATABASE_TO_UPPER=false")你可以添加参数。我怀疑这是否得到官方支持,但它对我有用。

生成连接url的spring代码是这样的: String.format("jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false", databaseName)


lub*_*nac 1

您可能希望放弃通过 EmbeddedDatabaseBuilder 进行显式创建。Spring Boot 根据配置自动创建 H2 实例。所以我会尝试这个application.properties

spring.datasource.url=jdbc:h2:file:~/testdb;DATABASE_TO_UPPER=false
Run Code Online (Sandbox Code Playgroud)