Programing/Spring
Spring @Transactional 이 정상동작 하지 않는 이유
리커니
2021. 10. 14. 17:12
반응형
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 값을 같게 설정함에 주의하세요
반응형