使用多个事务管理器没有名为“transactionManager”的bean可用

时间:2018-04-27 08:05:00

标签: spring-data-jpa datasource transactionmanager

我正在使用spring JPA连接到我的主人和我的主人。奴隶数据库。 我创建了两个事务管理器,一个用于master数据库和另一个用于奴隶和分别命名为masterTransactionManager和slaveTransactionManager。

但是当我尝试使用@Transactional注释时使用slaveTransactionManager时,它仍然在寻找默认的“transactionManager”。

我已经尝试了它的价值和& Transactional注释的transactionManager参数。 知道为什么会这样吗?

以下是我的代码: -

 @Override
      @Transactional(value = "slaveTransactionManager")
      public EmailDTO getDataByIdSlave(Long dataId, Long brandId) {
        emailDataSlaveRepository.findAll();
        return null;
      }

以下是我的一个从属数据配置:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = BeanConstant.SLAVE_ENTITY_MANAGER_FACTORY,
    transactionManagerRef = DataConfigConstant.SLAVE_TRANS_MANAGER,
    basePackages = {DataConfigConstant.SLAVE_REPO_PACKAGE}
)
public class SlaveDataSourceConfiguration {

  @Autowired
  @Qualifier(BeanConstant.JPA_REPO)
  private Map<String, Object> jpaRepo;

  @Bean(BeanConstant.SLAVE_DATA_SOURCE_PROPERTIES)
  @ConfigurationProperties(DataConfigConstant.SLAVE_DATA_SOURCE)
  public DataSourceProperties slaveDataSourceProperties() {
    return new DataSourceProperties();
  }

  @Bean(name = BeanConstant.SLAVE_DATA_SOURCE)
  @ConfigurationProperties(prefix = DataConfigConstant.SLAVE_DATA_SOURCE)
  public DataSource slaveDataSource(@Qualifier(BeanConstant.SLAVE_DATA_SOURCE_PROPERTIES) DataSourceProperties dataSourceProperties) {
    return dataSourceProperties.initializeDataSourceBuilder().build();
  }

  @Bean(name = BeanConstant.SLAVE_ENTITY_MANAGER_FACTORY)
  public LocalContainerEntityManagerFactoryBean entityManagerFactory(final EntityManagerFactoryBuilder builder,
                                                                     @Qualifier(BeanConstant.SLAVE_DATA_SOURCE) DataSource dataSource) {
    return builder.dataSource(dataSource).properties(jpaRepo).packages(DataConfigConstant.ENTITY_PACKAGE).persistenceUnit
        (DataConfigConstant.SLAVE_REPO_PROCESS_NAME).build();
  }

  @Bean(name = DataConfigConstant.SLAVE_TRANS_MANAGER)
  @Qualifier(value = DataConfigConstant.SLAVE_TRANS_MANAGER)
  public PlatformTransactionManager barTransactionManager(
      @Qualifier(BeanConstant.SLAVE_ENTITY_MANAGER_FACTORY) EntityManagerFactory
          barEntityManagerFactory) {
    return new JpaTransactionManager(barEntityManagerFactory);
  }

1 个答案:

答案 0 :(得分:0)

我已通过以下方式解决了这个问题:

除了数据源配置类之外,我在主类上使用了EnableJpaRepositories注释,因此共有三个事务管理器。

1)来自main / driver类的EnableJpaRepositories的事务管理器。 2)MasterTransactionManager。 3)SlaveTransactionManager。

一旦我从主类中删除了EnableJpaRepositories,它就开始正常工作了。