SpringBoot同时使用MyBatis事务以及MongoDB事务
SpringBoot同时使用MyBatis事务以及MongoDB事务
问题
SpringBoot项目中某个业务需要同时对MongoDB以及MySQL数据进行新增、删除、更改操作,但是默认提供的@Transactional只提供其中一种事务管理,不支持同时对2个事务进行管理。
解决办法
使用ChainedTransactionManager类进行多事务管理器处理,但是该类已经被标记为@Deprecated不推荐使用,但是勉强能用。
@Configuration
@EnableTransactionManagement
public class TransactionConfig {/*** Mongo事务管理器* @param dbFactory 数据工厂* @return 事务管理器*/@Bean("mongoTransactionManager")public MongoTransactionManager mongoTransactionManager(MongoDatabaseFactory dbFactory) {return new MongoTransactionManager(dbFactory);}/*** mysql事务管理器* @param dataSource 数据源* @return 事务管理器*/@Bean("myBatisTransactionManager")// 默认使用MySQL事务管理@Primarypublic DataSourceTransactionManager testTransactionManager(@Qualifier("dataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "chainedTransactionManager")public ChainedTransactionManager chainedTransactionManager(@Qualifier("myBatisTransactionManager") PlatformTransactionManager myBatisTransactionManager,@Qualifier("mongoTransactionManager") MongoTransactionManager mongoTransactionManager) {return new ChainedTransactionManager(myBatisTransactionManager, mongoTransactionManager);}
}
