*Spring XML 기반의 설정 및 어노테이션 설정을 기준으로 설명합니다.
DB를 조회하다 보면 여러 이유에서 응답이 느려질 경우가 있다.
튜닝등을 통해서 개선들을 할 수 있겠으나 프로그램 입장에서는 마냥 기다릴 수 없을 경우가 발생한다.
DBMS에서 timeout을 설정해 응답을 차단할 수 있겠으나 프로그램에서도 Timeout을 설정할 수가 있다.
안전한 운영을 위해서 프로그램에서 DB응답 Timeout을 설정하는 방법을 알아보자.
1. org.springframework.jdbc.datasource.DataSourceTransactionManager 에 Default Timeout 설정하기
Transaction 설정 xml 에서 DataSourceTransactionManager 속성에 defaultTimeout 을 설정할 수 있다.
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
<property name="defaultTimeout" value="120"/>
</bean>
property에 "defaultTimeout"을 설정해 주면 된다. value 값에 시간(단위: 초) 을 설정해서 최대 timeout 시간을 설정한다.
2. @Transactional 에 timeout 설정하기
전체적으로 timeout을 설정하는 것이 아니고,
특정 SQL 호출에 대해서 Timeout을 설정하고 싶은 경우에는 @ Transactional에
@Transactional(readOnly = true, timeout = 60)
public Object count(Map<String, Object> param) {
...
}