我配置了两个交易管理器
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>
Java配置中的其他内容
@Bean("transactionManager")
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
但是当我使用@Transactional注释时,在我看来,即使在点切割不匹配时,也会使用XML中定义的事务管理器。
我希望在执行时匹配在AOP中定义的切入点事务管理器 以及在Java配置中定义的@Transactional注释事务管理器。
出于某种原因,我无法在@Transactional注释中明确指定事务管理器名称,如@Transactional(“transactionManager”)。
有没有办法实现这个目标?
答案 0 :(得分:0)
在spring boot中(我猜它也应该适用于spring)我执行以下操作让spring知道与@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;
}
}