복붙노트

[SPRING] 여러 트랜잭션 관리자 문제 발생

SPRING

여러 트랜잭션 관리자 문제 발생

두 개의 별도의 스프링 XML 파일로 정의 된 두 개의 트랜잭션 관리자가 있고 둘 다 스프링 컨텍스트에로드됩니다.

파일 하나

   <tx:annotation-driven transaction-manager="transactionManager1"/>

  <bean id="transactionManager1"
       class="org.springframework.jdbc.DataSourceTransactionManager">
    ...
  </bean>

파일 2

 <tx:annotation-driven transaction-manager="transactionManager2"/>
  <bean id="transactionManager2"
          class="org.springframework.jdbc.DataSourceTransactionManager">
    ...
  </bean> 

아래 서비스에 대한 한정자를 표시하지 않은 경우 어떤 트랜잭션 관리자 스프링을 사용할 것입니다.

public class TransactionalService {

    @Transactional
    public void setSomething(String name) { ... }

    @Transactional
    public void doSomething() { ... }
}

해결법

  1. ==============================

    1.11.5.6 공식 문서에서 @Transactional 사용하기 :

    11.5.6 공식 문서에서 @Transactional 사용하기 :

    트랜잭션 관리자 이름이 transactionManager가 아니므로 @Transactional로 표시된 메소드에 사용할 트랜잭션 관리자를 지정해야합니다.

    업데이트 : 수정 된 질문을 해결합니다. @ Transactional annotation에서 사용할 트랜잭션 관리자를 지정할 수 있습니다 (@ Transactional.value () 참조).

    @Transactional("transactionManager1")
    //...
    
    @Transactional("transactionManager2")
    //...
    

    그러나 현재 설정에 몇 가지 문제점이 있습니다.

    필자가 생각한 해결책은 을 한 번 정의하고 @Transactional을 사용하여 첫 번째 관리자를 사용하고 @Transactional ( "transactionManager2")를 사용하여 두 번째 트랜잭션을 사용하는 것입니다. 또는 다른 방법.

  2. from https://stackoverflow.com/questions/12606257/spring-multiple-transaction-manager-issue by cc-by-sa and MIT license