Java JDBC连接和Oracle
我有一个场景,问题如下
应用服务器有两个到数据库的连接池A
和B
A
指向->DatabaseA
->;有128 connections
A
有一些存储过程,它们通过DB link
访问DatabaseB
中的表
B
指向->DatabaseB
->;有36 connections
现在让我们假设Java代码通过使用连接池A
调用DatabaseA
中存储的Proc。这个存储的进程正在通过数据库链接从DatabaseB
获取数据
问题:
基于这种情况,如果前端出现connection closed
错误。可以这样说吗,即使java从池A(128)调用SP(在DatabaseA
),但由于SP从DatabaseB
带来数据,它的连接数量较少(36)
基本上,我想知道数据什么时候通过DB链接传输,就像这样。。。它是否会减少分配给池B pointint到数据库B的36个连接
完全例外
我得到的确切例外是:--- Cause: java.sql.SQLException: Closed Connection
一些堆栈跟踪:
Caused by: java.sql.SQLException: Closed Connection at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:614) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:588) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:268) at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:193) at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:219) at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:266)
另外,我正在使用iBatis。。。所以没有try..catch..finally
块
# 1 楼答案
“基本上,我想知道什么时候数据会像这样通过DB链接……它会从分配给池B pointint到数据库B的36个连接中删除吗?”
否。数据库服务器将与其他数据库服务器建立独特的连接,而不考虑任何连接池
我不得不忍受防火墙在一段时间不活动后切断连接,所以我经常看到这个错误。查看dbms_会话。关闭_database _link,因为数据库链接连接通常会在会话期间保持(而且由于您有一个连接池,该会话可能会占用很长时间)
# 2 楼答案
存储过程正在数据库中运行;当它连接到另一个数据库时,它会直接连接,而不会通过应用服务器的池。事实上,它可以连接到链接到的任何数据库,无论应用服务器是否维护该数据库的连接池
# 3 楼答案
此异常表示资源泄漏,即JDBC代码未正确关闭
finally
块中的连接(以确保即使在出现异常的情况下也已关闭),或者连接已在多个线程之间共享。如果两个线程共享池中的同一个连接,而一个线程关闭了该连接,那么当另一个线程使用该连接时,就会发生此异常编写JDBC代码时,应该确保在同一个方法块中获取和关闭连接(以及语句和结果集)(顺序相反)。例如
另一个可能的原因是池中的连接闲置时间过长,并且在释放之前没有测试/验证它们。这可以在一个合适的连接池中配置。查阅其文件