У меня две версии одного и того же приложения. Они используют аналогичные схемы базы данных. Я хочу запустить тест junit, который сравнивает две таблицы с обеих сторон. Я использую Springboot и JPA. Я могу автоматически связать оба источника данных в одном и том же тесте. Я могу автоматически связать CrudRepository для одной из таблиц в основном источнике данных. Но как я могу автоматически подключить аналогичный репозиторий для той же таблицы, которая находится во втором источнике данных, в то же время в том же тесте Junit? Я хотел бы сделать что-то подобное в том же классе:
@Autowired( Datasource = "primarydatasource")
CustomerRepository fistCustomerRepository;
@Autowired( Datasource = "seconddatasource")
CustomerRepository secondCustomerRepository;
Я проверил много руководств и ответов здесь, но я не нашел четкого примера по этому поводу.




Вы можете создать два EntityManager
@Bean("em1")
public LocalContainerEntityManagerFactoryBean em1(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(customDataSource1())
.packages(DataSource.class)
.build();
}
@Bean("em2")
public LocalContainerEntityManagerFactoryBean em2(
EntityManagerFactoryBuilder builder) {
return ...;
}
Затем вы можете ввести диспетчер сущностей в свой репозиторий.
@Repository
class CustomerRepositoryOracle{
@PersistenceContext(name = "em1")
private EntityManager entityManager;
}
@Repository
class CustomerRepositoryPostgreSQL{
@PersistenceContext(name = "em2")
private EntityManager entityManager;
}
Если схема такая же, создайте абстрактный класс и передайте диспетчер сущностей из дочернего класса, @PersistenceContext(name = "em1") private EntityManager entityManager;
Должен ли я создавать два класса для репозиториев, даже если схема точно такая же? И как мне выразить, что один связан с первым источником данных, а другой со вторым источником данных? В вашем примере я не вижу, как это узнать. Спасибо