在配置两个事务管理器时,在没有明确指定事务管理器的情况下,将在@Transactions上使用哪一个



我配置了两个事务管理器

XML配置中的一个

<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 annotation事务管理器上使用。

由于某些原因,我无法在@Transactional注释中显式指定事务管理器名称,如@Transactional("transactionManager")。

有什么办法做到这一点吗?

在spring引导中(我想它也应该适用于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;
}
}

相关内容

  • 没有找到相关文章

最新更新