스프링 마이바티스 기반 트랙잭션 질문.


스프링 마이바티스 기반 환경에서 트랜잭션 경계 설정 질문 드립니다.

    @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번 트랙잭션의 실패 유무와 관계 없이 항상 실행(비동기) 하고자 합니다.

조언 부탁드려요!


조회수 206


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 { } 블록을 실행합니다.

  • 2016년 03월 29일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close