【发布时间】:2020-04-27 01:34:22
【问题描述】:
当 Java 服务 (HikariCP+JDBC+Oracle, pool=10) 有包含数据库操作和外部服务调用的大事务时,我遇到了问题,在运行此事务期间 Hikari 保留连接(至少通过 JMX 显示它) 直到交易完成。 由于服务调用导致事务很长(无法将其从事务中排除,我已经最小化超时)活动连接保留时间过长,它会阻塞所有服务。
线程在 getConnection() 上被阻塞。
这里的主要内容是活动连接仅在 Hikari 而不是在 Oracle 端,Oracle 将其显示为不活动。例如。 Hikari 正在浪费连接,因为实际上它对 DB 没有任何作用。
Hikari 中是否有任何配置可以解决此问题?或者也许一些模式如何避免它?
【问题讨论】:
-
看看我之前的回答有没有帮助stackoverflow.com/questions/58917381/…
-
感谢您的链接,但这是另一个故事。重新连接到数据库的成本很高,因此更喜欢使用静态连接池。接下来是解决不同的问题,你建议只是剪掉它,但我的问题是在不实际使用时重用它。
-
setMaxLifetime标记为在 X 秒后不实际使用时重复使用
标签: oracle transactions microservices hikaricp