我有一个场景,问题如下
应用程序服务器有两个到数据库的连接池。 A
和 B
A
指向 -> DatabaseA
-> 有 128 个连接
A
具有存储过程,可通过 DB 链接
访问驻留在 DatabaseB
中的表
B
指向 -> DatabaseB
-> 有 36 个连接
现在假设 Java 代码使用连接池 A
调用 DatabaseA
中的存储过程。此存储过程正在通过数据库链接从 DatabaseB
问题:
基于这种情况,如果我们在前端收到连接关闭
错误。是否可以这样说:即使 java 从池 A (128) 调用 SP(在 DatabaseA
中),但由于 SP 从 DatabaseB
获取数据,因此数据量较少连接数 (36)。
基本上我想知道数据何时通过这样的数据库链接传送...它是否会减少分配给池 B 的 36 个连接指向 DatabaseB?
完全异常(exception)
我得到的确切异常是: --- 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
block
最佳答案
存储过程正在数据库中运行;当它与其他数据库建立连接时,它会建立直接连接,并且不会通过应用程序服务器的池。事实上,它可以与链接到 A 的任何数据库建立连接,无论应用服务器是否维护该数据库的连接池。
关于Java JDBC 连接和 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978292/