Я настроил две базы данных Oracle с пружинной загрузкой, но Spring всегда выбирает первичную базу данных и игнорирует вторичную, любая помощь будет оценена.
моя конфигурация выглядит как это
приложение .properties
#=======================================
##### DB1 Configuration ######
spring.db1.datasource.url=jdbc:oracle:thin:@dr02sc-c1-scan.db1:1660
spring.db1.datasource.username=test
spring.db1.datasource.password=test
spring.db1.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.db1.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
spring.db1.hibernate.show_sql=false
spring.db1.hibernate.format_sql=false
spring.db1.hibernate.hbm2ddl.auto=none
spring.db1.entitymanager.packagesToScan=com.test.entity.db1
##### DB1 Configuration ######
##### DB2 Configuration ######
spring.db2.datasource.url=jdbc:oracle:thin:@dr01-scan.db2:1580
spring.db2.datasource.username=test2
spring.db2.datasource.password=test2
spring.db2.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.db2.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
spring.db2.hibernate.show_sql=true
spring.db2.hibernate.format_sql=false
spring.db2.hibernate.hbm2ddl.auto=none
spring.db2.entitymanager.packagesToScan=com.test.entity.db2
##### DB2 Configuration #####
это мой основной источник данных DB1. У него есть только один репозиторий.
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
@EnableJpaRepositories(entityManagerFactoryRef = "db1EntityManagerFactory", transactionManagerRef = "db1TransactionManager", basePackages = {
"com.test.dao.db1" })
public class Db1DBConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(Db1DBConfig.class);
@Value("${spring.db1.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.db1.datasource.username}")
private String user;
@Value("${spring.db1.datasource.password}")
private String password;
@Value("${spring.db1.datasource.url}")
private String url;
@Value("${spring.db1.hibernate.dialect}")
private String hibernateDialect;
@Value("${spring.db1.hibernate.show_sql}")
private String hibernateShowSql;
@Value("${spring.db1.hibernate.format_sql}")
private String hibernateFormatSql;
@Value("${spring.db1.hibernate.hbm2ddl.auto}")
private String hibernateHbm2DdlAuto;
@Value("${spring.db1.entitymanager.packagesToScan}")
private String packagesToScan;
@Primary
@Bean("db1DataSource")
public DataSource getDataSource() {
LOGGER.debug("db1: getDataSource");
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(user);
dataSource.setPassword(password);
dataSource.setJdbcUrl(url);
dataSource.setMaximumPoolSize(10);
dataSource.setMaxLifetime(2000000);
dataSource.setIdleTimeout(30000);
dataSource.setConnectionTimeout(30000);
dataSource.setMinimumIdle(5);
dataSource.addDataSourceProperty("cachePrepStmts", "true");
dataSource.addDataSourceProperty("prepStmtCacheSize", "250");
dataSource.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
dataSource.addDataSourceProperty("useServerPrepStmts", "true");
return dataSource;
}
@Primary
@Bean("db1TransactionManager")
@Autowired
public PlatformTransactionManager getTransactionManager(
@Qualifier("db1EntityManagerFactory") EntityManagerFactory entityManagerFactory) throws NamingException {
LOGGER.debug("db1: getTransactionManager");
JpaTransactionManager jpaTransaction = new JpaTransactionManager();
jpaTransaction.setEntityManagerFactory(entityManagerFactory);
return jpaTransaction;
}
@Primary
@Bean("db1EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean getEntityManagerFactory() {
LOGGER.debug("db1: getEntityManagerFactory");
LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(getDataSource());
emf.setPackagesToScan(packagesToScan);
emf.setJpaVendorAdapter(getHibernateAdapter());
emf.setPersistenceUnitName("db1");
Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.dialect", hibernateDialect);
jpaProperties.put("hibernate.hbm2ddl.auto", hibernateHbm2DdlAuto);
jpaProperties.put("hibernate.show_sql", hibernateShowSql);
jpaProperties.put("hibernate.format_sql", hibernateFormatSql);
jpaProperties.put("hibernate.temp.use_jdbc_metadata_defaults", "false");
emf.setJpaProperties(jpaProperties);
return emf;
}
@Primary
@Bean("db1HibernateAdapter")
public JpaVendorAdapter getHibernateAdapter() {
return new HibernateJpaVendorAdapter();
}
}
Это мой вторичный источник данных DB2. В нем более одного репозитория.
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
@EnableJpaRepositories(entityManagerFactoryRef = "db2EntityManagerFactory", transactionManagerRef = "db2TransactionManager", basePackages = {
"com.test.dao.db2" })
public class Db2DBConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(Db2DBConfig.class);
@Value("${spring.db2.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.db2.datasource.username}")
private String user;
@Value("${spring.db2.datasource.password}")
private String password;
@Value("${spring.db2.datasource.url}")
private String url;
@Value("${spring.db2.hibernate.dialect}")
private String hibernateDialect;
@Value("${spring.db2.hibernate.show_sql}")
private String hibernateShowSql;
@Value("${spring.db2.hibernate.format_sql}")
private String hibernateFormatSql;
@Value("${spring.db2.hibernate.hbm2ddl.auto}")
private String hibernateHbm2DdlAuto;
@Value("${spring.db2.entitymanager.packagesToScan}")
private String packagesToScan;
@Bean("db2DataSource")
public DataSource getDataSource() {
LOGGER.debug("db2: getDataSource");
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(user);
dataSource.setPassword(password);
dataSource.setJdbcUrl(url);
dataSource.setMaximumPoolSize(10);
dataSource.setMaxLifetime(30000);
dataSource.setIdleTimeout(30000);
dataSource.setConnectionTimeout(30000);
dataSource.setMinimumIdle(5);
dataSource.addDataSourceProperty("cachePrepStmts", "true");
dataSource.addDataSourceProperty("prepStmtCacheSize", "250");
dataSource.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
dataSource.addDataSourceProperty("useServerPrepStmts", "true");
return dataSource;
}
@Bean("db2TransactionManager")
@Autowired
public PlatformTransactionManager getTransactionManager(
@Qualifier("db2EntityManagerFactory") EntityManagerFactory entityManagerFactory) throws NamingException {
JpaTransactionManager jpaTransaction = new JpaTransactionManager();
jpaTransaction.setEntityManagerFactory(entityManagerFactory);
return jpaTransaction;
}
@Bean("db2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean getEntityManagerFactory() {
LOGGER.debug("db2: getEntityManagerFactory");
LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(getDataSource());
emf.setPackagesToScan(packagesToScan);
emf.setJpaVendorAdapter(getHibernateAdapter());
emf.setPersistenceUnitName("db2");
Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.dialect", hibernateDialect);
jpaProperties.put("hibernate.hbm2ddl.auto", hibernateHbm2DdlAuto);
jpaProperties.put("hibernate.show_sql", hibernateShowSql);
jpaProperties.put("hibernate.format_sql", hibernateFormatSql);
jpaProperties.put("hibernate.temp.use_jdbc_metadata_defaults", "false");
emf.setJpaProperties(jpaProperties);
return emf;
}
@Bean("db2HibernateAdapter")
public JpaVendorAdapter getHibernateAdapter() {
return new HibernateJpaVendorAdapter();
}
} ```