我知道H2具有一个称为的boolean属性/设置 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'
所以问题是,在这种情况下,告诉H2禁用
DATABASE_TO_UPPER
的最简单方法是什么?使用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();
}
}
另外,我告诉JPA/Hibernate不要auto-generate embedded database(没有这个问题是启动了两个内存数据库):
spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=none
最佳答案
您不能使用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)