资讯详情

spring – HikariCP空闲连接在连接池中保持活动状态

我使用的是Spring Boot(1.5.6),Hibernate,Postgres,Hikari(2.7.8).我的配置是:

spring.datasource.hikari.minimumIdle=1

spring.datasource.hikari.maximumPoolSize=20

spring.datasource.hikari.idleTimeout=30000

spring.datasource.hikari.poolName=SpringBootJPAHikariCP

spring.datasource.hikari.maxLifetime=50000

spring.datasource.hikari.connectionTimeout=30000

我期待的是,空闲连接应该是3万毫秒/ 空闲后释放30秒.

问题是每个请求都应该建立新的连接,并保留所有的空闲连接.所以一段时间后,我终于得到了20个空闲连接,并有了新的请求Hikari试着获得新的连接并获得它SpringBootJPAHikariCP – 连接不可用,请求在30001ms后超时.

所以,我做错了什么.还是误解了配置?

Hikari初始化日志:

SpringBootJPAHikariCP - configuration:

allowPoolSuspension...false

autoCommit...true

catalog...none

connectionInitSql...none

connectionTestQuery...none

connectionTimeout...30000

dataSource...none

dataSourceClassName...none

dataSourceJNDI...none

dataSourceProperties...{password=

更新:

在过去的24小时里,我尝试了几个不同线程的解决方案,但都没有解决我的问题.因此,这里的观察可能非常重要.

> SpringBootJPAHikariCP – 重置(autoCommit)连接org.postgresql.jdbc.PgConnection@1344bbf1找到此日志.研究

Reset (autoCommit) on connection in HikariCP这个帖子.试图自动提交两侧的相同设置(true)(hibernate和Hikari),并尝试在两侧使用false.还是没运气.

>启用leakDetectionThreshold,获得泄漏检测异常.所以试着去理解hibernate / spring事务管理器是否释放连接.从波纹管Logs它看上去像hibernate正常工作.

28 22:19:35- DEBUG - o.s.orm.jpa.JpaTransactionManager-371 :: Opened new EntityManager [org.hibernate.jpa.internal.EntityManagerImpl@4212be39] for JPA transaction

28 22:19:35- DEBUG - o.h.e.t.internal.TransactionImpl-51 :: begin

28 22:19:35- DEBUG - o.s.orm.jpa.JpaTransactionManager-403 :: Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@243e942]

2com.someentity.MyEntity#ac918eed-345f-4a6c-8539-fe14e7fc41e2

28 22:19:35- DEBUG - o.h.r.j.i.LogicalConnectionManagedImpl-137 :: Initiating JDBC connection release from afterTransaction

28 22:19:35- DEBUG - c.zaxxer.hikari.pool.ProxyConnection-242 :: SpringBootJPAHikariCP - Executed rollback on connection org.postgresql.jdbc.PgConnection@1344bbf1 due to dirty commit state on close().

28 22:19:35- DEBUG - o.h.e.i.AbstractFlushingEventListener-132 :: Processing flush-time cascades

28 22:19:35- DEBUG - o.h.e.i.AbstractFlushingEventListener-174 :: Dirty checking collections

28 22:19:35- DEBUG - org.hibernate.internal.SessionImpl-508 :: Disconnecting session

28 22:19:35- DEBUG - o.s.orm.jpa.JpaTransactionManager-759 :: Initiating transaction commit

28 22:19:35- DEBUG - o.s.orm.jpa.JpaTransactionManager-512 :: Committing JPA transaction on EntityManager [org.hibernate.jpa.internal.EntityManagerImpl@4212be39]

28 22:19:35- DEBUG - o.h.e.t.internal.TransactionImpl-62 :: committing

28 22:19:35- DEBUG - o.h.r.j.i.LogicalConnectionManagedImpl-137 :: Initiating JDBC connection release from afterTransaction

28 22:19:35- DEBUG - o.h.r.j.i.LogicalConnectionManagedImpl-137 :: Initiating JDBC connection release from afterTransaction

28 22:19:35- DEBUG - o.s.orm.jpa.JpaTransactionManager-600 :: Closing JPA EntityManager [org.hibernate.jpa.internal.EntityManagerImpl@4212be39] after transaction

28 22:19:35- DEBUG - o.s.o.jpa.EntityManagerFactoryUtils-435 :: Closing JPA EntityManager

>所有的空闲连接都是从postgres从空闲的角度来看,活跃的形式是Hikari的观点.因此,当数据库有5个空闲连接时,Hikari日志中有toatal = 5,active = 4,idle =,waiting = 0.

注意:

>也许我在这个问题上遇到了这个问题https://github.com/brettwooldridge/HikariCP/issues/109活动连接随着每笔交易的增加而增加.

> HikariCP – connection is not available这也是同样的问题.但没有人提供明确的解决方案.顺便说一句,我正在接受@Transactional乞讨,如答案所示.

标签: 连接器345

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台