gpt4 book ai didi

spring - 使用simplejdbccall时如何在spring中关闭refcursor

转载 作者:行者123 更新时间:2023-12-04 18:07:03 24 4
gpt4 key购买 nike

我正在使用 spring simpleJdbcCall 调用 oracle 存储过程,我正在使用 oracle 11g。

我偶然发现了一些帖子,这些帖子表明可能存在内存泄漏,因为 ref 游标没有被 spring 正确关闭。

在使用 spring simplejdbccall 时是否有显式关闭游标?还是增加 oracle OPEN_CURSOR 是唯一的出路?

我计划扩展我的应用程序以每小时处理大约一百万笔交易。任何建议都会有所帮助。

最佳答案

其实Spring JDBC不存在这样的问题。它在所有执行后关闭 finally 内的所有资源。 SimpleJdbcCall 使用JdbcTemplate:

public <T> T execute(CallableStatementCreator csc, CallableStatementCallback<T> action)
throws DataAccessException {
try {
...
}
catch (SQLException ex) {
...
}
finally {
if (csc instanceof ParameterDisposer) {
((ParameterDisposer) csc).cleanupParameters();
}
JdbcUtils.closeStatement(cs);
DataSourceUtils.releaseConnection(con, getDataSource());
}

}

ResultSet 输出参数相同:

protected Map<String, Object> processResultSet(ResultSet rs, ResultSetSupportingSqlParameter param) throws SQLException {
....
finally {
JdbcUtils.closeResultSet(rs);
}
return returnedResults;
}

从另一方面来说,我在高负载系统中对 Spring JDBC 和 Oracle 有丰富的经验,我想说的是,我们注意到在峰值负载时 Oracle 上有足够的开放资源,但在那之后它们已被正确释放。

尽管我们使用了 JBOSS Pooled DataSource 及其 TransactionMaanger

关于spring - 使用simplejdbccall时如何在spring中关闭refcursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23894940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com