스프링 마이바티스 기반 트랙잭션 질문.
조회수 1438회
스프링 마이바티스 기반 환경에서 트랜잭션 경계 설정 질문 드립니다.
@Override
@Transactional(readOnly = false, isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public void doSomeThing() {
//database select (1)
select()
//database insert (2)
insert()
//message queue notification (3)
noti();
}
3번 noti() 메소드는 1번2번 트랙잭션의 실패 유무와 관계 없이 항상 실행(비동기) 하고자 합니다.
조언 부탁드려요!
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
가장 심플하게 하는 방법은 try ~ finally 구문을 사용하면 될 것 같습니다.
try { //database select (1) select() //database insert (2) insert() } finally { //message queue notification (3) noti(); }
noti()에서 앞의 select와 insert에 대한 DB에서의 참조가 없다면, 위와 같이 하면 쉽게 해결할 수 있습니다.
try~finally 는 try { } 블록이 종료한 후, 심지어 예외가 발생하여 종료하더라도, finally { } 블록을 실행합니다.
- 조금 복잡하게 한다면, 혹은 스프링으로 해결하고 싶다면, 스프링의 AOP를 적용하는 방향으로 고려해보세요. https://techannotation.wordpress.com/2012/06/29/5-minutes-with-spring-aop/ 를 참고하면 될것 같습니다. 허대영(소프트웨어융합대학) 2016.3.29 17:13
댓글 입력