java - Spring Boot 2 使用多个数据源禁用自动提交 Hikari

标签 java spring-boot hikaricp

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

应用程序属性

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

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

最佳答案

我知道这已经很晚了,但这个问题让我的大脑爆炸了 ~2 天,这篇文章在谷歌搜索中排名第一,所以我会在这里发布其他人的解决方案。

其实很简单,只是我在这里的文档中遗漏了它 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-two-datasources

长话短说,确保在构建类之前添加 .type(HikariDataSource.class)

另外,如果你使用 jhipster,你还应该将你的配置指向 hikari 部分,就像这样 @ConfigurationProperties("spring.datasource.other.hikari")

关于java - Spring Boot 2 使用多个数据源禁用自动提交 Hikari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51989745/

相关文章:

java - Android Studio 中缺少向 androidX 的迁移

java - gradle springboot 和 postgresql 入门遇到问题

java - 如何绕过 java.nio.file.DirectoryNotEmptyException?

java - 来自 URL 或 java 输入流的 Matlab openfig

java - Spring Web服务删除响应字符串中的多个空格

java - gradle 构建失败 - 可能是 lombok 问题

java - 一个应用程序可以窃取其他应用程序的数据库连接吗?

postgresql - 连接未关闭(HikariCP、Postgres)

java - 带有 Oracle com.zaxxer.hikari.pool.HikariProxyCallableStatement 的 HikariCP 无法转换为 oracle.jdbc.OracleCallableStatement

java - 图像到字节数组到字符串(反之亦然)