我知道H2具有一个称为的bo​​olean属性/设置 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)

10-07 19:15
查看更多