#spring-boot #jpa
#весенняя загрузка #jpa
Вопрос:
У меня есть две версии одного и того же приложения. Они используют похожие схемы баз данных. Я хочу запустить тест junit, который сравнивает две таблицы с обеих сторон. Я использую Springboot и JPA. Я могу автоматически подключить оба источника данных в одном тесте. Я могу автоматически подключить CrudRepository для одной из таблиц в основном источнике данных. Но как я могу автоматически подключить аналогичный репозиторий для той же таблицы, которая находится во втором источнике данных, в то же время в том же тесте Junit? Я хотел бы сделать что-то подобное в том же классе:
@Autowired( Datasource="primarydatasource")
CustomerRepository fistCustomerRepository;
@Autowired( Datasource="seconddatasource")
CustomerRepository secondCustomerRepository;
Я проверил множество руководств и ответов здесь, но я не нашел четкого примера по этому вопросу.
Ответ №1:
Ответ №2:
Вы можете создать два EntityManager
@Bean("em1")
public LocalContainerEntityManagerFactoryBean em1(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(customDataSource1())
.packages(DataSource.class)
.build();
}
@Bean("em2")
public LocalContainerEntityManagerFactoryBean em2(
EntityManagerFactoryBuilder builder) {
return ...;
}
Затем вы можете внедрить entity manager в свой репозиторий
@Repository
class CustomerRepositoryOracle{
@PersistenceContext(name="em1")
private EntityManager entityManager;
}
@Repository
class CustomerRepositoryPostgreSQL{
@PersistenceContext(name="em2")
private EntityManager entityManager;
}
Комментарии:
1. Должен ли я создать два класса для репозиториев, даже если схема точно такая же? И как мне выразить, что один связан с первым источником данных, а другой — со вторым источником данных? В вашем примере я не вижу, как это узнать. Спасибо
2. Если схема одинакова, создайте абстрактный класс и передайте entity manager из дочернего класса, @PersistenceContext(name=»em1″) private EntityManager EntityManager;