【问题标题】:No bean named 'transactionManager' available using multiple transaction manager使用多个事务管理器没有可用的名为“transactionManager”的 bean
【发布时间】:2018-04-27 08:04:59
【问题描述】:

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

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

我已经尝试过使用 Transactional 注释的 value 和 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);
  }

【问题讨论】:

  • 我很困惑。您在谈论 masterTransactionManager 但示例使用 slaveTransactionManager?
  • 嗨西蒙,很抱歉造成混乱,我现在已经解决了。

标签: spring-data-jpa datasource transactionmanager


【解决方案1】:

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

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

1) 来自主/驱动程序类的 EnableJpaRepositories 的事务管理器。 2) 主事务管理器。 3) SlaveTransactionManager。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 2012-05-29
    • 2012-11-20
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2015-05-05
    • 2015-02-18
    相关资源
    最近更新 更多