Spring Supports for Mulit DataBase JPA
#Add the same in Application.porperties
database1.datasource.url =jdbc:oracle:thin:@localhost:1521:first
database1.datasource.username =first
database1.datasource.password =first
database1.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
database2.datasource.url =jdbc:oracle:thin:@localhost:1521:second
database2.datasource.username =second
database2.datasource.password =second
database2.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
database1.datasource.url =jdbc:oracle:thin:@localhost:1521:first
database1.datasource.username =first
database1.datasource.password =first
database1.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
database2.datasource.url =jdbc:oracle:thin:@localhost:1521:second
database2.datasource.username =second
database2.datasource.password =second
database2.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
You would nee to create two ava files one for primary DB and oher for secoandary,
Primary class to be annotated with
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.multi.db.primary.repo",
entityManagerFactoryRef = "databas1EntityManagerFactory",
transactionManagerRef= "databas1TransactionManager)
would also need belwo given funcions
@Bean(name = "datasource1")
@Primary
public DataSource dataSource1(){
return database1SourcePorperties()
.initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Primary
@Bean(name = "databas1EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean databas1EntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource1())
.packages(Users.class)
.build();
}
@Bean
@Primary
@ConfigurationProperties("database1.datasource")
public DataSourceProperties database1SourcePorperties() {
return new DataSourceProperties();
}
@Bean(name="databas1TransactionManager")
@Primary
public JpaTransactionManager db1TM(final @Qualifier ("databas1EntityManagerFactory") LocalContainerEntityManagerFactoryBean db1Factorybean) {
return new JpaTransactionManager(db1Factorybean.getObject());
}
#Complete class for Secondary DataSource
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.multi.db.secondary.repo",
entityManagerFactoryRef = "database2EntityManagerFactory",
transactionManagerRef= "database2TransactionManager"
)
public class SecondaryDataSource {
@Bean(name = "datasource2")
public DataSource dataSource2(){
return database2SourcePorperties().initializeDataSourceBuilder().type(BasicDataSource.class).build();
}
@Bean
@ConfigurationProperties("database2.datasource")
public DataSourceProperties database2SourcePorperties() {
return new DataSourceProperties();
}
@Bean(name = "database2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean databas2EntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource2())
.packages("com.multi.db.secondary")
.build();
}
@Bean(name="database2TransactionManager")
public JpaTransactionManager db2TM(final @Qualifier ("database2EntityManagerFactory") LocalContainerEntityManagerFactoryBean db2Factorybean) {
return new JpaTransactionManager(db2Factorybean.getObject());
}
}
No comments:
Post a Comment