복붙노트

[SPRING] 여러 개의 @Transactional 데이터 소스를 봄

SPRING

여러 개의 @Transactional 데이터 소스를 봄

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="data.emf" />
</bean>

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


<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="data.emf" />
</bean>

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

내 서비스 계층에서 @Transactional (name = "transactionManager2"); 여러 트랜잭션 관리자가있는 경우 사용할 트랜잭션 관리자를 식별하려면?

해결법

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

    1.value 속성을 사용하여 @Transactional과 함께 사용할 tx 관리자를 지정할 수 있습니다.

    value 속성을 사용하여 @Transactional과 함께 사용할 tx 관리자를 지정할 수 있습니다.

    예 :

    @Transactional("txManager1");
    

    또는 더 명시적인 TransactionProxyFactoryBean을 사용할 수 있습니다.이 기능을 사용하면 어떤 tx 관리자가 어떤 객체를 프록시하게 할 것인지를 세밀하게 제어 할 수 있습니다. 여전히 주석을 사용하지만 bean을 자동 감지하지는 않으며, bean별로 명시 적으로 구성됩니다.

    이것은 일반적으로 문제가되지 않지만, 그렇게해야하는 아주 좋은 이유가 없다면 다중 트랜잭션 관리자를 갖는 것은 현명하지 않습니다. 두 명의 관리자가 필요하다고 판단되면 일반적으로 관리자로 할 수 있는지 확인하는 것이 좋습니다. 예를 들어 앱 서버에 두 개의 데이터 소스가 구성되어있는 경우 두 개의 별도 JpaTransactionManager 또는 DataSourceTransactionmanagers가 아닌 단일 JtaTransactionManager에 둘 다 통합 할 수 있습니다.

  2. ==============================

    2.둘 이상의 트랜잭션 관리자가 필요합니다. 순서대로 중첩되거나 별도의 트랜잭션을 수행하려고 할 수 있습니다. 그런 다음 다른 전파 설정을 사용할 수 있습니다. 단일 트랜잭션 관리자를 사용하는 구성에서는 트랜잭션 전파를 참조하십시오.

    둘 이상의 트랜잭션 관리자가 필요합니다. 순서대로 중첩되거나 별도의 트랜잭션을 수행하려고 할 수 있습니다. 그런 다음 다른 전파 설정을 사용할 수 있습니다. 단일 트랜잭션 관리자를 사용하는 구성에서는 트랜잭션 전파를 참조하십시오.

  3. from https://stackoverflow.com/questions/1961371/spring-multiple-transactional-datasources by cc-by-sa and MIT license