org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30002ms.
DEBUG - HikariPool-1 - Pool stats (total=10, active=9, idle=1, waiting=0)
spring.datasource.hikari.leakDetectionThreshold=2000
java.lang.Exception: Apparent connection leak detected
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
at com.clarivate.singularity.chemworkbench.dcrws.database.ReadFromDb.readStructureSearch(ReadFromDb.java:187)
给出错误的方法如下:
public class myClass(){
@Autowired
NamedParameterJdbcTemplate jdbcTemplate;
@Transactional
public List<DcrData> readStructureSearch(String sqlStr, String fileData) throws SQLException {
List<DcrData> dcrDataList = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = this.jdbcTemplate.getJdbcTemplate().getDataSource().getConnection().unwrap(OracleConnection.class); // <<<< This is line 187 mentioned above which is giving the error
Clob myClob = conn.createClob();
int ret = myClob.setString( 1, fileData);
ps = conn.prepareStatement(sqlStr);
ps.setClob(1,myClob); // This works, Types.CLOB doesn't work.
rs = ps.executeQuery();
ResultSetHandler<List<DcrData>> handler =
new BeanListHandler<DcrData>(DcrData.class, new BasicRowProcessor(new GenerousBeanProcessor()));
dcrDataList = handler.handle(rs);
return dcrDataList;
}finally {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
logger.info("DSxxx4");
}
}
如何创建一个没有泄漏的连接?为什么Hikari认为我的conn.close()方法没有关闭连接?任何想法都很欣赏。
我对函数在做什么有点困惑。它似乎在CLOB上运行select约束,但我可能错了。我在不知道的情况下很难重现这个问题。
也就是说,这里有几件事可以尝试。首先,您不需要NamedParameterJdbcTemplate,只需要一个数据源。试着自动取而代之。其次,似乎没有理由获取原始Oracle连接本身,您可以直接使用数据源返回的连接。第三,try with resources模式使代码更容易遵循Java将自动处理关闭资源。它在Java8中可用。最后,释放CLOB可能会有所帮助。
下面是我提到的一个示例:
public class MyClass {
@Autowired
DataSource dataSource;
@Transactional
public List<DcrData> readStructureSearch(String sqlStr, String fileData) throws SQLException {
try (Connection conn = this.dataSource.getConnection()) {
Clob myClob = conn.createClob();
myClob.setString(1, fileData);
try (PreparedStatement ps = conn.prepareStatement(sqlStr)) {
ps.setClob(1, myClob);
try (ResultSet rs = ps.executeQuery()) {
ResultSetHandler<List<DcrData>> handler =
new BeanListHandler<>(DcrData.class, new BasicRowProcessor(new GenerousBeanProcessor()));
List<DcrData> dcrDataList = handler.handle(rs);
myClob.free();
return dcrDataList;
}
}
}
}
}
版本 上下文 我只是想在核心示例io中运行http客户端。维特斯。实例果心http。易于理解的客户运行此示例时,its发现已建立的连接在请求完成后未关闭。 服务器端我没有看到任何问题。因为在尝试使用jmeter和服务器时,它工作得很好。所以我认为问题在于HttpClient。 有人能帮我吗? 提前谢谢。复制的步骤 额外的 即使在请求和响应结束后,仍会显示以下内容。在给LINUX 窗户 在LINUX
我有一个带有数据库连接池的grails/groovy web应用程序。设置如下所示: 我使用java melody进行诊断和监控,并注意到一些奇怪的行为。例如,当执行查询数据库的作业时,连接可以超越maxActive属性。为什么这是可能的? 我需要显式关闭Grails连接吗?该作业调用一个服务方法,该方法通过withCriteria Grails调用简单地执行DB查询,如: 似乎每次运行这个程序,
我正在使用DBCP连接池,并创建了一个MBean来在Jconsole中显示连接池的统计信息。我观察到的是,即使应用程序上没有活动(意味着没有页面点击等),连接池统计数据也会显示活动连接。 我们在上面看到的16个虚拟连接并没有降到零。我不知道为什么?有人能解释一下吗? 谢谢
我的连接器类: 连接器。JAVA 这是我的DAO类(简化):UserDAO. java 在这里,我发现了关于Hikari的一些事实的问题: 您必须在HikariCP为您提供的连接实例上调用关闭() 可能是我的不起作用,因为它只是Hikari在方法中提供给我的连接的副本。
我将spring data mongodb(1.7.0.RELEASE)与spring webmvc框架一起用于我的web应用程序。我使用mongoRepository使用基本的CRUD函数,但我没有在代码中关闭mongo连接,因为我以为spring data mongodb会自己关闭它,但它会继续打开新连接,而不是关闭它们。这些太多的连接导致我的应用程序崩溃,我必须一次又一次(每天两次)重新启动
我正在尝试使用Springboot反应式webclient进行HTTP调用。远程服务器错误导致连接关闭。 请查找以下使用Webclient进行rest调用的代码。 Webclient创建的代码: 第一次通话后,我收到以下日志: 当我在一段时间后(比如10分钟)拨打电话时,连接将变为非活动状态。我正在获取以下日志: 我发现连接没有正确返回到池。配置中是否缺少任何内容?我是否已正确关闭连接?我想这应该