Spring Boot, Spring Data JPA с несколькими источниками данных Hikari и одним источником данных Конфигурация Java Файл - PullRequest
0 голосов
/ 28 марта 2020

Как создать один файл конфигурации java с несколькими конфигурациями источников данных, упомянутых в application.properties, так что при добавлении любого 'n' количества источников данных. Он должен обрабатывать все источники данных автоматически с одним и тем же файлом конфигурации.

Кроме того, все источники данных должны использовать один и тот же JPARepository для запроса данных. Кроме того, я хочу создать список менеджеров сущностей для выполнения определенных c операций с источниками данных specfi c.

application.properties

site1.url=jdbc:postgresql://localhost:4567/postgres
site1.username=someUsername
site1.password=somePassword

site2.url=jdbc:postgresql://localhost:5433/postgres
site2.username=someUsername
site2.password=somePassword

SiteConfiguration. java

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "site1EntityManager",
        transactionManagerRef = "site1TransactionManager",
        basePackages = "com.someProject.repositoryInterface"
)
public class Site1Config extends HikariConfig {

    @Autowired
    private Environment environment;

    @Primary
    @Bean(name = "site1EntityManager")
    public HikariDataSource mysqlDataSource() {
        setJdbcUrl(environment.getProperty("site1.url"));
        setUsername(environment.getProperty("site1.username"));
        setPassword(environment.getProperty("site1.password"));

        return new HikariDataSource(this);
    }

    @Primary
    @Bean(name = "site1EntityManager")
    public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(mysqlDataSource())
                .packages(ModelClass.class)
                .persistenceUnit("site1PU")
                .build();
    }

    @Primary
    @Bean(name = "site1TransactionManager")
    public PlatformTransactionManager mysqlTransactionManager(@Qualifier("site1EntityManager") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

Это базовый c пример файла конфигурации единого источника данных. Я хочу сделать SiteConfiguration как класс generi c в форме 'site (Number)' и создать отдельные источники данных, менеджеры сущностей для каждого из случаев.

АВТОМАТИЧЕСКИ ЭТО ДОЛЖНО ПОЛУЧИТЬ НОМЕР Данных из файла application.properites, и он должен настроить все данные, указанные в файле свойств.

Кроме того, каждый источник данных должен использовать один и тот же JPARepository.

1 Ответ

0 голосов
/ 02 мая 2020

Насколько я понимаю, вам нужно создать количество источников данных "N" в зависимости от того, сколько сайтов вы объявили в application.properties . Я вижу только то, что вы компонентов DataSource должны быть созданы динамически вместо того, чтобы быть статически привязанными к вашему application.properties.

В Spring есть способ объединяя использование "ConfigurableBeanFactory" и "BeanFactoryAware".

И в StackOverflow уже есть ответ на этот вопрос: Здесь

Надеюсь, что это поможет

...