【问题标题】:Spring Boot 2 disable Autocommit Hikari with multiple datasourcesSpring Boot 2 使用多个数据源禁用 Autocommit Hikari
【发布时间】:2019-01-30 01:35:07
【问题描述】:

我正在尝试使用多个数据源关闭 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

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

【问题讨论】:

  • Hikari 是 Spring Boot 2 中的默认设置,所以也许只是省略“.hikari.”?此外,“密码”之后的任何选项都不起作用 - Hikari 使用不同的选项,如 Hikari homepagethis answer 所示。
  • 这看起来很有效,这很有趣,因为如果我在 configurationProperties 中使用 ignoreUnknownFields = false,应用程序将无法启动,因为“app.datasource.ucm.auto-commit”未解决,但如果我将 ignoreUnknownFields 设置为 true,它似乎在关闭自动提交的情况下工作!谢谢
  • Hikari 的 autoCommit 默认为 true 吗?

标签: java spring-boot hikaricp


【解决方案1】:

我使用的是 Spring Boot 2.0.4.RELEASE,遇到了同样的问题。花费数小时处理显示非工作属性的相关帖子...

删除 .hikari 对我有用。

spring.datasource.ucm.autocommit=false

【讨论】:

    【解决方案2】:

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

    其实很简单,只是我在https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-two-datasourceshttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-two-datasources的文档中错过了

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

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

    【讨论】:

      【解决方案3】:

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

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

      Spring Boot Ref 1

      default.auto-commit

      【讨论】:

        【解决方案4】:

        Make false default-auto-commit 应该可以工作。

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

        【讨论】:

          猜你喜欢
          • 2019-07-31
          • 1970-01-01
          • 1970-01-01
          • 2021-03-07
          • 1970-01-01
          • 2022-01-22
          • 2019-09-09
          • 2018-10-05
          • 2019-02-03
          相关资源
          最近更新 更多