package
com.gfg.scripter.config;
import
javax.sql.DataSource;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Qualifier;
import
org.springframework.boot.context.properties.ConfigurationProperties;
import
org.springframework.boot.jdbc.DataSourceBuilder;
import
org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import
org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
import
org.springframework.context.annotation.Primary;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import
org.springframework.orm.jpa.JpaTransactionManager;
import
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import
org.springframework.transaction.annotation.EnableTransactionManagement;
import
com.gfg.scripter.entity.Intern;
@Configuration
@EnableJpaRepositories
(basePackages =
"com.gfg.scripter.repository"
, transactionManagerRef =
"transcationManager"
, entityManagerFactoryRef =
"entityManager"
)
@EnableTransactionManagement
public
class
DataSourceConfig {
@Bean
@Primary
@Autowired
public
DataSource dataSource() {
DataSourceRouting routingDataSource =
new
DataSourceRouting();
routingDataSource.initDatasource(noidaDataSource(), bangaloreDataSource());
return
routingDataSource;
}
@Bean
@ConfigurationProperties
(prefix =
"noida.datasource"
)
public
DataSource noidaDataSource() {
return
DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties
(prefix =
"bangalore.datasource"
)
public
DataSource bangaloreDataSource() {
return
DataSourceBuilder.create().build();
}
@Bean
(name =
"entityManager"
)
public
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder) {
return
builder.dataSource(dataSource()).packages(Intern.
class
).build();
}
@Bean
(name =
"transcationManager"
)
public
JpaTransactionManager transactionManager(
@Autowired
@Qualifier
(
"entityManager"
) LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) {
return
new
JpaTransactionManager(entityManagerFactoryBean.getObject());
}
}