WAS/WebLogic

[Tips] JDBC Statement 타임아웃(Timeout) 설정

투칼론 2018. 4. 20. 23:15
반응형

Statement 또는 Prepared Statement JDBC API를 통해 데이터베이스에 SQL을 실행 시에 타임아웃을 설정하는 방법은 WebLogic 콘솔 또는 java.sql.Statement.setQueryTimeout() 메소드를 통해 할 수 있다.

주의사항은 DB 시스템 장애 또는 네트워크 장애 시에는 이 Timeout을 적용하지 못한다. 이 Timeout은 DB 서버와 통신이 가능해야 오라클 DB에서 SQL Code ORA-1013을 정상적으로 응답한다.

시스템 운영 전에 시스템 페일오버 테스트 시에 DB 시스템을 다운 시킨 후, 처리 중인 SQL은 Socket ReadTimeout 값에 의해 Exception 발생과 함께 리턴됨에 주의한다.

1. WebLogic 콘솔에서 설정하는 방법
해당 DataSource 선택 > Connection Pool 탭 선택 > Advanced 옵션 
"Statement Timeout" 파라미터 값 변경한다.
* -1   :   디폴트값. 이 설정을 비활성화*  0    : 타임아웃이 발생하지 않음(무한대값)
JDBC가 StatementTimeout을 지원하지 않으면, Exception이 발생하면서, 해당 값이 적용되지 않는다.


2. JDBC에서 제공하는 setQueryTImeout() 메소드를 통해 설정하는 방법
 소스코드에서 setQueryTimeout 메소드에 설정하면, 위의 WebLogic 콘솔에서 설정하는 Statement Timeout 값을 오버라이딩하여, 이 값이 설정된다.
아래는 간단한 예제이다.

 Statement stmt = conn.CreateStatement();


 stmt.setQueryTimeout(30);   // 30초로 타임아웃 설정
 ResultSet rs = stmt.executeQuery("SELECT ... ");
 ...
 stmt.close();

 

[글참조] JDBC Query Timeout https://blueyikim.tistory.com/2216

[글참조]  JDBC Socket ReadTimeout  https://blueyikim.tistory.com/1614