因为当我尝试使用Propagation.REQUIRES_NEW
执行一个事务,我相信打开一个新的连接到数据库,我得到以下错误:
java.sql.SQLTransientConnectionException: HikariPool Connection is not available, request timed out after
根据我的搜索,似乎 Hikari 没有给我的线程一个新的连接。当我尝试手动关闭以前的连接时,我不再收到此错误。
c = DataSourceUtils.getConnection(dataSource);
c.close();
那么解决方法是什么?如果每个线程的连接数有限制,我可以更改此设置吗?
如果您使用的是 spring boot,请在 application.property 中添加 below 属性以定义池大小
spring.datasource.hikari.minimum-idle= 10
spring.datasource.hikari.maximum-pool-size= 100
我如何关闭当前(previous)连接:
c = DataSourceUtils.getConnection(dataSource);
c.close();
没有得到这一点,如果你使用spring-tx
为什么不使用它的JdbcTemplate
?
Connection c = null;
try {
c = DataSourceUtils.getConnection(dataSource);
...
} finally {
if (c != null) {
c.close();
}
}
或使用 try-with-resources:
try (Connection c = DataSourceUtils.getConnection(dataSource)) {
...
}
in regards to@Transactional(Propagation.REQUIRES_NEW)
-consider refactoring you code.
UPD。释放通过DataSourceUtils#getConnection
获取的 DB 连接的正确模式如下:
try {
c = DataSourceUtils.getConnection(dataSource);
...
} finally {
if (c != null) {
DataSourceUtils.releaseConnection(c, dataSource);
}
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(70条)