Spring Boot – управление несколькими динамическими источниками данных одного типа с помощью JPAJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Boot – управление несколькими динамическими источниками данных одного типа с помощью JPA

Сообщение Anonymous »

Приложение Java Spring, которому необходимо взаимодействовать с несколькими базами данных MySQL. Каждая база данных имеет одну и ту же схему и таблицы, и список этих баз данных может динамически меняться. Я использую специальную конфигурацию источника данных для загрузки всех источников данных. Затем мне необходимо выполнить сценарий MySQL для всех источников данных, собранных на карте, а затем обновить определенную таблицу.
;
Я выполняю сценарий таким образом

Код: Выделить всё

@Transactional
public void executeSqlScript() throws SQLException {
for (Map.Entry entry : dataSources.entrySet()) {
ScriptUtils.executeSqlScript(entry.getValue().getConnection(), new ClassPathResource("test.sql"));
}
}
Но я также хочу получить и обновить определенную таблицу с помощью Spring JPA.

Код: Выделить всё

TestTable testTable =  testTableRepository.findLatest();
Проблема, с которой я столкнулся, заключается в том, как обращаться с несколькими динамическими базами данных при настройке. Потому что при запуске метода сценария у меня нет никаких проблем. Я сталкиваюсь с ошибками при доступе к классу @Respository. Он жалуется на eventmangager.
Вот как загружаются мои источники данных:

Код: Выделить всё

CONFIG::
datasource:
connectionPrefix: jdbc:mysql://localhost:3306/
username: root
password: root
databases:
- demo1
- demo2
- demo3
- demo4

@Bean
public Map localDataSources() throws SQLException {
Map dataSources = new HashMap();

for (String db : dataSourceConfigProperties.getDatabases()) {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser(dataSourceConfigProperties.getUsername());
dataSource.setPassword(dataSourceConfigProperties.getPassword());
dataSource.setUrl(dataSourceConfigProperties.getConnectionPrefix() + db);
dataSources.put(dataSourceConfigProperties.getConnectionPrefix() + db, dataSource);

return dataSources;
}

@Bean
public Map entityManagerFactories(Map dataSources) {
Map entityManagerFactories = new HashMap();

for (Map.Entry entry : dataSources.entrySet()) {
LocalContainerEntityManagerFactoryBean emFactoryBean = new LocalContainerEntityManagerFactoryBean();
emFactoryBean.setDataSource(entry.getValue());
emFactoryBean.setPackagesToScan("com.test.mangager.model"); // Set the package to scan for entities
emFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());

Map properties = new HashMap();
properties.put("hibernate.hbm2ddl.auto", "update");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
emFactoryBean.setJpaPropertyMap(properties);

emFactoryBean.afterPropertiesSet();
entityManagerFactories.put(entry.getKey(), emFactoryBean);
}

return entityManagerFactories;
}

@Bean
public Map entityManagers(Map entityManagerFactories) {
Map entityManagers = new HashMap();

for (Map.Entry entry : entityManagerFactories.entrySet()) {
EntityManager em = entry.getValue().getObject().createEntityManager();
entityManagers.put(entry.getKey(), em);
}

return entityManagers;
}

@Bean
public Map transactionManager(Map dataSources) {
Map transactionManagers = new HashMap();
for (Map.Entry entry : dataSources.entrySet()) {
transactionManagers.put(entry.getKey(), new DataSourceTransactionManager(entry.getValue()));
}
return transactionManagers;
}
ОШИБКА:
Ошибка создания bean-компонента с именем testTableRepository, определенным в com.test.manager.repository.TestTableRepository, определенном в @EnableJpaRepositories, объявленном в приложении: Невозможно разрешить ссылку на bean-компонент «jpaSharedEM_entityManagerFactory» при настройке свойства bean-компонента «entityManager»

Подробнее здесь: https://stackoverflow.com/questions/787 ... e-with-jpa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»