본문 바로가기

Computer/JAVA

Spring Transaction Timeout 설정하기

*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) {
    ...
}