-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
회사일중에 딱 이런상황에 마주쳐서 질문드립니다.
21.12.11 15:57 작성 조회수 261
0
이번 강의에서 내부메소드를 사용할 경우 그 메소드를 클래스로 만들어서 실행하게되면 AOP가 적용된다고 알려주셔서 실제 일하는곳에서 한번 적용을 해보았습니다.
[컨트롤러 - consultSave]
컨트롤러에서 insertConsult를 합니다.
[서비스 - ConsultService]
원래 서비스클래스안에 4개의 로직이 있었으나 Transactional이 적용되지 않아서 각각의 로직을 클래스로 만들어서 적용하였습니다.
[분리된 서비스클래스]
총4개의 분리된 서비스가 있지만, 너무길어질것 같아서 1개의 로직만 업로드하였습니다!! 물론 분리된 서비스는 스프링빈에 등록될 수 있도록 @Service를 붙여놓은 상태입니다.
간략히 정리하여 저의 생각을 말씀드리면 tranSave.insertConsult()메서드를 통하여 저장을 한 후에 그 다음 로직에서 고의적으로 Exception이 발생시키면 @Transactional이 동작하여 rollback이 되어야한다고 생각하는데 rollback이 동작하지 않아 DB에 1개의 로우가 insert되어있는 현상입니다. 클래스를 나누어서 구조변경하였음에도 불구하고 @Transactional이 동작하지 않는 이유가 궁금합니다.
혹시 try catch문가 연관이 되어있을까요??
답변을 작성해보세요.
1
David
2021.12.11
안녕하세요. 김은재님, 공식 서포터즈 David입니다.
.
스프링 트랜잭션의 경우 checkedException에서는 예외가 발생하더라도 롤백시키지 않습니다.
발생한 예외가 CheckedException인가요? 그렇다면 RuntimeException을 발생시켜보시겠어요?
.
감사합니다.
답변 1