2017-10-26 7 views
0

내가 구성한 두 개의 트랜잭션 관리자명시 적으로 트랜잭션 관리자를 지정하지 않고 @Transactions에서 사용되는 두 개의 트랜잭션 관리자를 구성하는 경우?

구성이

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<aop:config> 
    <aop:advisor pointcut="execution(* com.myorg.*Service.*(..))" advice-ref="transactionAdvice"/> 
</aop:config> 

<tx:advice id="transactionAdvice" transaction-manager="transactionManager"> 
</tx:advice> 

는 자바 설정에서 기타가

@Bean("transactionManager") 
public DataSourceTransactionManager transactionManager(DataSource dataSource) { 
    return new DataSourceTransactionManager(dataSource); 
} 

하지만 @Transactional 주석을 사용할 때 나에게 나타납니다 트랜잭션 관리자가 정의 XML에

하나 포인트 컷이 일치하지 않는 경우에도 XML에서 사용 중입니다.

AOP에 정의 된 pointcut 트랜잭션 관리자와 일치하는 실행시 과 Java 구성에 정의 된 @Transactional annotation 트랜잭션 관리자가 사용되기를 원합니다.

@Transactional ("transactionManager")와 같은 @Transactional 주석에 트랜잭션 관리자 이름을 명시 적으로 지정할 수없는 이유가 있습니다.

이것을 달성 할 방법이 있습니까? 봄 부팅에서

답변

0

(그리고 난 그것뿐만 아니라 봄 작동합니다 생각) 나는 봄이 @Transactional 주석을 사용하는 기본 트랜잭션 관리자 무엇인지 알 수 있도록 다음을 수행하십시오

@Configuration 
public class CustomTransactionManagementConfiguration implements TransactionManagementConfigurer, ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    /** 
    * @return default transaction manager for rogue {@link Transactional} annotations 
    */ 
    @Override 
    public PlatformTransactionManager annotationDrivenTransactionManager() { 
     return applicationContext.getBean("myTransactionManagerQualifier", PlatformTransactionManager.class); 
    } 

    @Override 
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
     this.applicationContext = applicationContext; 
    } 
}