Несколько баз данных - Spring Data JPA + Hibernate в TomEE - PullRequest
0 голосов
/ 29 марта 2020

Я новичок в Apache TomEE и пытаюсь создать приложение Spring Data JPA для подключения к нескольким базам данных.

Шаг 1: настроил 2 ресурса базы данных в томе. xml файл в папке conf сервера

Шаг 2: 2 класса конфигурации с созданием EntityManagerFactory с источником данных JNDI выглядят как показано ниже

@Configuration
@PropertySource({"classpath:persistence-multiple-db-boot.properties"})
@EnableJpaRepositories(
  basePackages = "com.test.multipledb.dao.user",
  entityManagerFactoryRef = "userEntityManager",
  transactionManagerRef = "userTransactionManager")
public class PersistenceUserAutoConfiguration {

    @Primary
    @Bean
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource userDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    @Primary
    public LocalContainerEntityManagerFactoryBean userEntityManager() {
       LocalContainerEntityManagerFactoryBean em
         = new LocalContainerEntityManagerFactoryBean();
       em.setDataSource(userDataSource());
       em.setPackagesToScan(
          new String[] { "com.test.multipledb.model.user" });

       HibernateJpaVendorAdapter vendorAdapter
           = new HibernateJpaVendorAdapter();
       em.setJpaVendorAdapter(vendorAdapter);
       HashMap<String, Object> properties = new HashMap<>();
       properties.put("hibernate.hbm2ddl.auto",
          env.getProperty("hibernate.hbm2ddl.auto"));
       properties.put("hibernate.dialect",
       env.getProperty("hibernate.dialect"));
       em.setJpaPropertyMap(properties);

    return em;
}

    // userTransactionManager bean
}


@Configuration
@PropertySource({"classpath:persistence-multiple-db-boot.properties"})
@EnableJpaRepositories(
  basePackages = "com.test.multipledb.dao.product", 
  entityManagerFactoryRef = "productEntityManager", 
  transactionManagerRef = "productTransactionManager")
public class PersistenceProductAutoConfiguration {

    @Bean
    @ConfigurationProperties(prefix="spring.second-datasource")
    public DataSource productDataSource() {
        return DataSourceBuilder.create().build();
    }

        @Bean
public LocalContainerEntityManagerFactoryBean productEntityManager() {
    LocalContainerEntityManagerFactoryBean em
      = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(productDataSource());
    em.setPackagesToScan(
      new String[] { "com.test.multipledb.model.product" });

    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    HashMap<String, Object> properties = new HashMap<>();
    properties.put("hibernate.hbm2ddl.auto",
      env.getProperty("hibernate.hbm2ddl.auto"));
    properties.put("hibernate.dialect",
      env.getProperty("hibernate.dialect"));
    em.setJpaPropertyMap(properties);

    return em;
}


    // productTransactionManager bean
}

Начиная с Spring 3.1, постоянство. xml больше не требуется. Я добавил свойства непосредственно в компонент управления предприятием.

Но проблема в том, что когда я запускаю сервер, TomEE выдает ошибку ниже

Отсутствует требуемая стойкость. xml для @PersistenceContext ref "entityManager" для единицы basePersistentUnit

Было бы здорово услышать ваше мнение / любые ресурсы с примерами на этот счет и, еще раз, с извинениями, если это окажется ошибкой с моей стороны.

...