Нет bean-компонента с именемactionManager, доступного с использованием менеджера нескольких транзакций - PullRequest
0 голосов
/ 27 апреля 2018

Я использую Spring JPA для подключения к базам данных master и slave. Я создал два менеджера транзакций, один для основной базы данных, другой для подчиненного, назвал их masterTransactionManager и slaveTransactionManager соответственно.

Но когда я пытаюсь использовать свой slaveTransactionManager с помощью аннотации @Transactional, он все еще ищет по умолчанию «actionManager ».

Я пробовал это с параметром value &actionManager аннотации Transactional. Есть идеи, почему это может произойти?

Ниже мой код: -

 @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 голосов
/ 27 апреля 2018

Я исправил эту проблему следующим образом:

Я использовал аннотацию EnableJpaRepositories в своем главном классе, кроме классов конфигурации источника данных, поэтому было всего три менеджера транзакций.

1) Менеджер транзакций с помощью EnableJpaRepositories из класса main / driver. 2) MasterTransactionManager. 3) SlaveTransactionManager.

Как только я удалил EnableJpaRepositories из основного класса, он начал работать правильно.

...