2017-10-26 6 views
0

私は2つのトランザクションマネージャのJava設定の他明示的にトランザクションマネージャを指定せずに@Transactionsで使用される2つのトランザクションマネージャをコンフィグレーションするとどうなりますか?

XML Configで一つ

<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で使用されています。

使用するAOPで定義されたpointcutトランザクションマネージャと一致する実行時に、 とJavaコンフィグレーションで定義された@Transactionalアノテーショントランザクションマネージャが使用されることを望みます。

何らかの理由で、@ 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; 
    } 
} 
関連する問題