如何在Spring Boot中禁用H2的DATABASE_TO_UPPER功能,而不需要明确的连接URL。
如何在Spring Boot中禁用H2的DATABASE_TO_UPPER功能,而不需要明确的连接URL。
我知道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'
所以问题是,在这种情况下,告诉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不要自动生成嵌入式数据库(如果不这样做,会出现两个内存数据库的问题):
spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=none
问题出现的原因:在Spring Boot中,如果想要禁用H2数据库的DATABASE_TO_UPPER功能,通常需要在连接URL中显式地设置DATABASE_TO_UPPER=false。然而,通过Spring的代码生成连接URL时,并没有提供设置DATABASE_TO_UPPER的选项。
解决方法:可以通过调用setName方法,将DATABASE_TO_UPPER=false作为参数添加到连接URL中。尽管这种方法可能没有得到官方支持,但在实际使用中是可行的。
具体做法是,在调用setName方法时传入连接URL,并在URL末尾添加";DATABASE_TO_UPPER=false"。示例如下:
setName("testdb;DATABASE_TO_UPPER=false")
这样就可以禁用H2数据库的DATABASE_TO_UPPER功能,实现大小写敏感的数据库操作。