Spring Boot Hikar - 多数据源 java.sql.SQLException:连接已关闭

问题描述 投票:0回答:1

应用程序运行良好几个小时,并开始面临以下异常:

“java.sql.SQLException:连接已关闭于 com.zaxxer.hikari.pool.ProxyConnection$ClosedConnection.lambda$getClosedConnection$0(ProxyConnection.java:515) 在 com.sun.proxy.$Proxy171.prepareStatement(来源未知) com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) 在 com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:149) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:151) 在org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2104) 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2034) 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2012) 在 org.hibernate.loader.Loader.doQuery(Loader.java:953) 处 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) 在 org.hibernate.loader.Loader.doList(Loader.java:2838) 处 org.hibernate.loader.Loader.doList(Loader.java:2820) 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2652) 在 org.hibernate.loader.Loader.list(Loader.java:2647) 在 org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338) 在 org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2131) 在 org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1163) 在 org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:173) 在 org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533) 在 org.hibernate.query.Query.getResultList(Query.java:165)


调用查询代码:

@Autowired
private final EntityManager entityManager;

void someMethod() {
var q = entityManager.createNativeQuery(query);
var rs = q.getResultList(); // exception at this line in stack trace
// other code
}

我们最近在这个博客之后添加了多个数据源。它有可能引起问题吗?但无法证明某些观点。非常感谢任何帮助。

java postgresql spring-boot hibernate hikaricp
1个回答
0
投票

使用连接池时,请确保始终关闭连接并为每个查询请求一个新连接。持有连接可能会导致池在空闲超时后将其关闭。

在 Hikari 中,您没有获得实际的连接,而是获得代理实现,其中底层资源由 Hikari 内部管理,因此重用此连接必然会导致问题。

如果此问题是由连接管理不善的库引起的,则后备解决方案是配置 Hikari 以允许底层连接无限期地处于空闲状态。然而,这并不是最理想的。

© www.soinside.com 2019 - 2024. All rights reserved.