2013-08-29 4 views
2

데이터베이스 연결을 제대로 닫지 않는 코드가 몇 개 있습니다. org.apache.commons.dbcp.AbandonedTrace $ AbandonedObjectException : DBCP 객체가 생성 됨 2013-08-29 02:55:00 다음 코드는 결코 닫히지 않았습니다. 이 메시지는 다음 몇 시간 동안 여러 번 닫히지 않은 다른 연결에 대해 반복됩니다.Tomcat 및 JDBC 연결 풀 - 폐쇄되지 않은 연결을보고하기위한 타이밍

catalina.out의 다른 정보를 보면이 메시지가 오전 7시 40 분경 catalina.out에 인쇄 된 것을 알 수 있습니다. 나는 카탈로니아에서보고 된 다른 사례를 보았습니다. 그 다음날. 내 질문은이 메시지가 catalina.out에 언제 인쇄되는지 결정하는 것입니다. 정확히 어떻게 작동합니까?

답변

4

DBCP는 공개 소스이므로 코드를 직접보고 알아낼 수 있습니다. DBCP가 버려진 연결을 검사하는 방식은 협동 가비지 수집의 한 형태입니다. 연결 풀에서 연결을 체크 아웃하면 먼저 버려진 연결을 확인하고이를 정리합니다.

그래서 몇 시간 동안 새로운 연결을 요청하지 않으면 버려진 연결이 제거되지 않습니다. 그리고 (예 : 영업일 시작) 풀에서 연결이 요청되면 먼저 버려진 연결을 모두 제거합니다.

borrowObject()의 코드를 보면 구성에 따라 removeAbandoned()이 호출되어 버려지는 연결을 취소하고 로그에 기록합니다.