반응형
Spring @Transactional 이 정상동작 하지 않는 이유
interface 메소드에 @Transactional 어노테이션을 사용하여 처리할 경우 아래의 Link를 참고하세요.
https://aljjabaegi.tistory.com/473
class 메소드에 @Transactional 을 줄 경우 정상동작 하지 않습니다.
이유는 트랜젝션이 내부적으로 AOP Dynamic Proxy 방식으로 동작하는데, 이는 기본적으로 인터페이스만 프록시 객체로 생성하기 때문입니다.
정확한 이해를 위해서는 Transactional 의 동작원리 와 Proxy Pattern을 검색해보세요.
위의 문제를 해결하기 위해서는 클래스도 프록시 객체로 생성하는 옵션을 추가해주면 됩니다.
위 링크에서 생성한 comtext-transaction.xml 파일에 아래 코드를 추가합니다.
<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />
옵션을 추가하게 되면 클래스도 프록시 객체를 생성하여 클래스 내부 메소드에 @Transactional 옵션을 주면 정상동작 하게 됩니다.
DataSourceTransactionManager를 bean에 등록한 id 와 transaction-manager 값을 같게 설정함에 주의하세요
반응형
'Programing > Spring' 카테고리의 다른 글
Java RSA 비대칭 암호화 구현 개인키, 공개키 생성 (1) | 2023.02.23 |
---|---|
Spring MVC 의 흐름과 주요 컴포넌트, 웹 서비스 흐름 (0) | 2022.05.02 |
Spring mybatis Oracle insert all 방법. 한번에 여러 행 추가 방법 list insert 방법 foreach insert (0) | 2020.04.06 |
Spring Transaction 설정 방법. 에러발생? 롤백해. (0) | 2019.09.10 |
Oracle mybatis foreach merge 방법 collection merge문 (0) | 2019.08.13 |
댓글