바람둥이 연결 풀링을 사용하고 있습니다. 그래서 원인이 된 두 범인 방법을 발견 나는 예외 org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object created 2015-01-17 22:12:18 by the following code was never closed:
다음 시작 그런 removeAbandoned="true" logAbandoned="true" removeAbandonedTimeout="3"
Tomcat 연결 풀 : 연결을 해제하지 않는 몇 가지 방법
:하지만 예외 다음되었다 org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
은 그래서 누수를 찾을 수있는 context.xml에서 다음 줄에 넣어 이 누출. 두 가지 방법은 연결을 얻는 일반적인 방법, 즉 드라이버 특정 연결에 액세스하기 위해 unwrap을 호출합니다.
try (Connection conn = DataSourceConnectionPool.getConnection().unwrap(OracleConnection.class);
OracleCallableStatement cstmt = (OracleCallableStatement) conn.prepareCall(MIGRATE_ACCOUNT)) {
...
....
)
중요한 것은 내가 JDK7 즉 자동 리소스 관리에서 try 블록을 사용하고 있다는 것입니다. 따라서 finally 블록이 필요 없습니다. 접속 종료는 JDK에 의해 자동으로 처리됩니다. 하지만 왜이 포장되지 않은 연결이 닫히지 않습니다. 그리고 나는 다음을 수행하려고 할 때 :
try (Connection poolConn = DataSourceConnectionPool.getConnection();
Connection conn = poolConn.unwrap(OracleConnection.class);
을 나는 java.sql.SQLException: Already closed.
어떻게 가까운이 연결을 얻고있다. try 블록을 사용하지 않고 수동으로해야합니까? 이 핸들을 처리 할 수있는 블록 핸들을 사용하면 안됩니까?
첫 번째 질문은 당신이 할 수 .unwrap() 코드는 어디에서 누수가 발생하는 것을 확인했다 어떻게? –