스프링에서 트랜잭션을 처리하는 방법

 

1. 코드 기반 처리 방법 (기존 commit, rollback 을 이용)

 

2. 선언적 트랜잭션 처리방법 ( <tx: advice> xml 방식 / @Transactional 어노테이션 방식 ) 

※ 어노테이션 방식은 조건이 있다

2-1 트랜잭션 매니저가 Bean으로 등록 됨

2-2 <tx:annotation-driven /> 태그가 존재

@Transactional 어노테이션은 rollback을 위한 어노테이션이다 

(커넥션 반환 시 아무 트랜잭션 처리가 되어있지 않다면 자동 commit이기 때문이다)

- 기본적으로 스프링은 SQLException 을 unChecked Exception ( 명시적으로 예외처리 안해도 됨 )

으로 바꿔놨기 떄문에 예외처리를 해놓지 않고 Exception 발생시 트랜잭션으로 rollback을 수행한다는 개념이다

 

2-1, 2-2 ->

root-context에 가서

1. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
   </bean>

 <!-- 스프링에서 사용하는 proxy를 이용한 트랜잭션 제어가 안될 경우 추가적인 트랜잭션 매니저를 추가해서 문제 해결 -->

2. namespace - tx 체크 후

<tx:annotation-driven /> 작성

 

=> @Transactional(rollbackFor = Exception.class)

rollbackFor  속성 : 어떤 예외 발생 시 롤백 수행할 지 지정

스프링에서 예외처리하는 방법

 

1. 메소드별 try-catch /throws 예외 처리

 

2. 컨트롤러 별로 예외 처리 -@ExceptionHandler

 

3. 전역(모든 클래스) 에서 발생하는 예외를 하나의 클래스에서 처리

 

 

+ Recent posts