我有两个不同的PlatformTransactionManager数据源,LocalContainerEntityManagerFactoryBean
我有RoutingDataSource类,它扩展org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource来为每个PlatformTransactionManager路由正确的数据源 .
我使用org.springframework.transaction.annotation.Transactional作为@Transactional(value =“reportingDatasource”)的管理器方法已经取消了
我在我的存储库中有javax.persistence.EntityManager声明来执行一些查询 .
该EntityManager声明期望PersistenceContext具有如下所述的unitName来标识不同的数据源 . 有没有办法使用一个EntityManager声明,其中Transactional将根据指定的值路由到预期的数据源
@PersistenceContext(unitName =“master”)private EntityManager em;
@PersistenceContext(unitName =“reporing”)private EntityManager reportEm;
如果我没有指定unitName,则抛出此错误“没有类型为'javax.persistence.EntityManagerFactory'的限定bean可用:预期单个匹配bean但找到2”
1 回答
我认为它应该是2个EntityManager,以及一个chainedTransactionManager,用于尽力而为1个PC
Spring - Is it possible to use multiple transaction managers in the same application? https://jira.spring.io/browse/SPR-3955 Implementing Spring ChainedTransactionManager according to the "best efforts 1PC" pattern