2010-08-10 6 views
0

나는 Ibatis와 C3P0 연결 풀과 함께 Spring 프레임 워크를 사용하는 응용 프로그램을 만들고 있습니다. 이 시스템은 약 12 ​​개의 별도 데이터베이스에 연결됩니다.org.springframework.jdbc.CannotGetJdbcConnectionException에 대한 JDBC 연결 정보를 기록하는 방법

데이터베이스 중 하나에 도달 할 수 없으면 Spring에서 생성 된 로그 파일에 스택 추적을 얻습니다 (아래 참조). 그러나이 로깅에는 데이터베이스에 도달 할 수없는 매우 중요한 정보가 누락되어 있습니다.

기본적으로 연결 오류가 발생하면 jdbc 연결 문자열 (암호는 필요하지 않음)을 기록합니다. Spring에 이것을 기록하도록하는 쉬운 방법이 있습니까?

Invocation of init method failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! 
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! 
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database! 
     at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) 
     at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
     at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113) 
     at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy.getConnection(TransactionAwareDataSourceProxy.java:109) 
     at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113) 
     at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79) 
     at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:183) 
     at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:242) 

....

+0

c3p0의 버전은 무엇입니까? – Bozho

+0

c3p0 버전 0.9.1.2입니다. – Rolf

+0

예외를 캡처하고 데이터 소스 정보 옵션을 인쇄하도록 코드를 리팩터링합니까? – gerrytan

답변

0

당신은과 같이 (당신의 log4j를 사용하는 가정) 봄의 ORM 층에서 로깅을 사용 가능하게 할 수 :

log4j.logger.org.springframework.orm를 = 추적 , debugLog

P6Spy을 사용하여 데이터베이스 연결을 로그 할 수도 있습니다.

마지막으로 IDE에서 SQLException (이 예외가 발생하면 중단)에 중단 점을 설정하는 방법은 무엇입니까?

+1

팁 주셔서 감사합니다. 그러나이 문제는 주로 프로덕션 환경의 문제이며 추적 로깅 및 중단 점은 허용되지 않습니다. 아마도 유익한 로깅을 요청하는 것이 합리적이라고 생각하기 때문에 Spring에 변경 요청을해야 할 것입니다. – Rolf