Spring Boot 2禁用具有多个数据源的Autocommit Hikari

问题描述 投票:3回答:4

我试图在Hikari上使用多个数据源进行自动提交,但我没有运气。我正在使用Spring Boot 2(2.0.3.RELEASE)。这是我的配置:

application.properties

spring.datasource.primary.driver=com.mysql.cj.jdbc.Driver
spring.datasource.primary.url=jdbc:mysql://localhost:3306/spark?autoReconnect=true
spring.datasource.primary.username=xxxx
spring.datasource.primary.password=xxxx
spring.datasource.primary.max-active=100
spring.datasource.primary.max-idle=5
spring.datasource.primary.min-idle=1
spring.datasource.primary.test-while-idle=true
spring.datasource.primary.test-on-borrow=true
spring.datasource.primary.validation-query=SELECT 1
spring.datasource.primary.time-between-eviction-runs-millis=5000
spring.datasource.primary.min-evictable-idle-time-millis=60000


spring.datasource.ucm.driver=com.mysql.cj.jdbc.Driver
spring.datasource.ucm.url=jdbc:mysql://localhost:3306/usercentral?autoReconnect=true
spring.datasource.ucm.username=xxx
spring.datasource.ucm.password=xxx
spring.datasource.ucm.max-active=100
spring.datasource.ucm.test-while-idle=true
spring.datasource.ucm.test-on-borrow=true
spring.datasource.ucm.validation-query=SELECT 1
spring.datasource.ucm.time-between-eviction-runs-millis=5000
spring.datasource.ucm.min-evictable-idle-time-millis=60000
spring.datasource.ucm.hikari.auto-commit=false  # <- Not working

这是我的配置类,其中设置了数据源

@Primary
@Bean
@ConfigurationProperties("spring.datasource.primary")
public DataSourceProperties primaryDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@Primary
@ConfigurationProperties("spring.datasource.primary")
public DataSource primaryDataSource() {
    return primaryDataSourceProperties().initializeDataSourceBuilder().build();
}

@Bean
@ConfigurationProperties("spring.datasource.ucm")
public DataSourceProperties ucmDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean(name="ucmDataSource")
@ConfigurationProperties("spring.datasource.ucm")
public DataSource ucmDataSource() {
    return ucmDataSourceProperties().initializeDataSourceBuilder().build();
}

以下是创建池时输出的内容:

-2018-08-23 15:48:22.845 -DEBUG 21455 --- [nio-8081-exec-1] com.zaxxer.hikari.HikariConfig           : 1151 : allowPoolSuspension.............false
-2018-08-23 15:48:22.846 -DEBUG 21455 --- [nio-8081-exec-1] com.zaxxer.hikari.HikariConfig           : 1151 : autoCommit......................true
-2018-08-23 15:48:22.846 -DEBUG 21455 --- [nio-8081-exec-1] com.zaxxer.hikari.HikariConfig           : 1151 : catalog.........................none
-2018-08-23 15:48:22.846 -DEBUG 21455 --- [nio-8081-exec-1] com.zaxxer.hikari.HikariConfig           : 1151 : connectionInitSql...............none

如何关闭此连接池上的自动提交?

谢谢!

java spring-boot hikaricp
4个回答
2
投票

我正在使用Spring Boot 2.0.4.RELEASE,并遇到了同样的问题。花了几个小时的相关帖子显示非工作属性......

删除.hikari为我工作。

spring.datasource.ucm.autocommit=false

0
投票

您的问题的替代解决方案,将default-auto-commit属性配置为false。它也应该工作。

spring.datasource.ucm.default-auto-commit=false

Spring Boot Ref 1

default.auto-commit


0
投票

make false default-auto-commit应该有效。

spring.datasource.ucm.default-auto-commit=false

0
投票

我知道这已经很晚了但是这个问题让我的大脑爆炸了大约2天,这篇文章是google搜索的顶部,所以我会在这里发布其他人的解决方案。

它实际上非常简单,只是我在这里https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-two-datasources的文档中错过了它

log story short确保在构建类之前添加.type(HikariDataSource.class)

此外,如果您使用jhipster,您还应该将配置指向hikari部分,如@ConfigurationProperties("spring.datasource.other.hikari")

© www.soinside.com 2019 - 2024. All rights reserved.