웹 개발/Spring Framework
@Transactional(선언적 트랜잭션) bean Id 지정해서 사용하기
희랍인 조르바
2018. 6. 28. 14:53
스프링에서 일반적으로 선언적 트랜잭션을 사용하기 위해서는
dataSource가 있는 xml 위치에서
1 2 3 | <!-- datasource가 있는 xml--> <tx:annotation-driven/> | cs |
을 선언해서 사용한다.
하지만, 복수개의 트랜잭션을 사용하기 싶어하는 분들도 있을 것이고,
나처럼 기존 소스를 안 건드리기 위해 특정 부분에서만 트랜잭션을 걸어주고 싶을 수 있다.
에러가 발생해야 내가 무엇을 몰랐는지 알게 되는 것 같다.
(에러의 긍정적인 부분이라 생각함)
1 2 3 | <!-- datasource가 있는 xml--> <tx:annotation-driven/> | cs |
dataSource가 있는 xml에서 위와 같이 선언하고 JUnit을 돌려보았더니
위와 같은 에러가 발생했다.
이게 무엇인지 구글링을 해보니 tx:anntation-driven은 default 값으로 transactinManager로 선언된
DataSourceTransactionManager를 찾는 것을 알았다.
아무 것도 없이 선언을 해두면 transactionManager라는 bean을 찾는다는 것이다.
특정 bean Id를 찾게 하기 위해서는 다음과 같이 xml을 작성한다.
1 2 3 4 5 6 7 | <!-- datasource가 있는 xml--> <tx:annotation-driven transaction-manager="chocolateTransactionManager"/> <bean id="chocolateTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="egov.dataSource" /> </bean> | cs |
<tx:annotation-driven 뒤에 transaction-manager="빈 아이디"/>로 만들어주는 것이다.
자바 코드에서도 @Transactional을 사용할 때도 bean Id를 지정해주어야한다.
1 2 3 4 5 6 7 | /* 트랜잭션을 사용할 자바 클래스 */ @Transactional("chocolateTransactionManager") public int testMethod(){ int chocolateCount = testService.insertChoco; return chocolateCount; } | cs |
1. tx-annotaion-driven을 DataSourceTransaction 클래스의 bean 아이디를 기입한다.
2. 사용할 트랜잭셔널 애노테이션에서 bean Id를 작성한다.