如何在Spring Boot中禁用H2的DATABASE_TO_UPPER功能,而不需要明确的连接URL。

15 浏览
0 Comments

如何在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

0
0 Comments

问题出现的原因:在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功能,实现大小写敏感的数据库操作。

0
0 Comments

问题的出现原因是在使用Spring Boot时,希望禁用H2数据库的DATABASE_TO_UPPER功能,但不想使用显式的连接URL来实现。

解决方法是在application.properties文件中进行配置。具体操作如下:

spring.datasource.url=jdbc:h2:file:~/testdb;DATABASE_TO_UPPER=false

这样,Spring Boot会根据配置自动创建H2实例,并禁用DATABASE_TO_UPPER功能。

0