gpt4 book ai didi

java - Spring Boot-摆脱Hikari数据源并使用H2

转载 作者:行者123 更新时间:2023-12-03 05:19:07 25 4
gpt4 key购买 nike

我想在Spring Boot应用程序中使用H2数据库。
这是我在application.properties中拥有的:

spring.datasource.name=testdb
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=whydoesthishavetobe
spring.datasource.password=sodifficult
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
这是build.gradle文件中的相关行:
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
当我检查H2数据库的连接时,一切都很好。
但是尽管如此,当我将新实体发布到应用程序中时,我没有看到在H2数据库中创建任何东西,并且从日志中看到,在后台使用了Hikari数据源。
为什么Spring会忽略application.properties文件而不使用H2数据源?如何强制它使用H2数据源?
这是Spring Boot 2.3.4.RELEASE。

最佳答案

我猜您有多个数据源,并且默认情况下将自动连接H2以外的其他数据源。因为Hirakicp是连接池而不是数据库。
您不必摆脱Hirakicp,而是将h2数据源设置为主
如果您有多个数据源,以下解决方案应该可以使用,
如果您配置了多个数据源bean,那仅仅是因为spring正在 Autowiring 其他数据源以用作默认源。
在声明H2 Datasource bean时使用@Primary批注应该可以解决此问题。
使用此注释将强制spring将数据自动连接到h2数据源。
如果您尚未为H2声明数据源bean,但有其他数据源bean,则需要声明h2 bean并使用@primary注释将其设置为primary。
注意-Hirakicp是数据库连接对象,而不是db。
范例-

    @Bean("one")
public BasicDataSource dataSourceOne() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl(env.getProperty("spring.a.connectionUrl"));
basicDataSource.setDriverClassName(env.getProperty("spring.a.DriverClass"));
basicDataSource.setUsername(env.getProperty("spring.a.username"));
basicDataSource.setPassword(env.getProperty("spring.a.password"));
// basicDataSource.setMaxActive(2);
return basicDataSource;

}

@Primary
@Bean("two")
public BasicDataSource dataSourceTwo() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl(env.getProperty("spring.u.connectionUrl"));
basicDataSource.setDriverClassName(env.getProperty("spring.u.DriverClass"));
basicDataSource.setUsername(env.getProperty("spring.u.username"));
basicDataSource.setPassword(env.getProperty("spring.u.password"));
return basicDataSource;

}

关于java - Spring Boot-摆脱Hikari数据源并使用H2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64549392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com