У меня есть требование для создания службы REST, которая будет работать с различными экземплярами БД в зависимости от номера экземпляра БД в запросе. Я реализовал это согласно этой статье , и это работает. Но в этом примере я вижу, как добавить свойства для разных БД из файла, но этот реквизит только app.datasource. У меня есть другие реквизиты, которые являются общими для каждого источника данных, и я хочу добавить их из файла, а не в жестком кодировании в bean-компоненте.
Моя конфигурация выглядит так:
spring:
datasource:
fr:
jdbc-url: val
username: val
password: val
de:
jdbc-url: val
username: val
password: val
us:
jdbc-url: val
username: val
password: val
jpa:
properties:
hibernate:
dialect: val
format_sql: true
show-sql: true
mvc:
throw-exception-if-no-handler-found: true
resources:
add-mappings: false here
А также конфигурация с bean-компонентами :
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "val",
entityManagerFactoryRef = "multiEntityManager",
transactionManagerRef = "multiTransactionManager"
)
public class PersistenceConfiguration {
private final String MODEL_PACKAGE_SCAN = "val";
@Primary
@Bean(name = "frDataSource")
@ConfigurationProperties("spring.datasource.fr")
public DataSource frDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean(name = "deDataSource")
@ConfigurationProperties("spring.datasource.de")
public DataSource deDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean(name = "usDataSource")
@ConfigurationProperties("spring.datasource.us")
public DataSource usDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean(name = "multiRoutingDataSource")
public DataSource multiRoutingDataSource() {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DBInstanceNum.FR, frDataSource());
targetDataSources.put(DBInstanceNum.DE, deDataSource());
targetDataSources.put(DBInstanceNum.US, usDataSource());
MultiRoutingDataSource multiRoutingDataSource = new MultiRoutingDataSource();
multiRoutingDataSource.setDefaultTargetDataSource(frDataSource());
multiRoutingDataSource.setTargetDataSources(targetDataSources);
return multiRoutingDataSource;
}
@Bean(name = "multiEntityManager")
public LocalContainerEntityManagerFactoryBean multiEntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(multiRoutingDataSource());
em.setPackagesToScan(MODEL_PACKAGE_SCAN);
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(hibernateProperties());
return em;
}
@Bean(name = "multiTransactionManager")
public PlatformTransactionManager multiTransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(multiEntityManager().getObject());
return transactionManager;
}
@Primary
@Bean(name = "dbSessionFactory")
public LocalSessionFactoryBean dbSessionFactory() {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(multiRoutingDataSource());
sessionFactoryBean.setPackagesToScan(MODEL_PACKAGE_SCAN);
sessionFactoryBean.setHibernateProperties(hibernateProperties());
return sessionFactoryBean;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
// properties.put("hibernate.show_sql", true);
// properties.put("hibernate.format_sql", true);
return properties;
}
}
Я не хочу жестко кодировать значения в hibernateProperties (). Как я могу разобрать и установить их из файла?