Skip to content

Instantly share code, notes, and snippets.

@sonus21
Created April 9, 2023 10:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sonus21/2116680b1f2c4ee249349ee56808b207 to your computer and use it in GitHub Desktop.
Save sonus21/2116680b1f2c4ee249349ee56808b207 to your computer and use it in GitHub Desktop.
SqlDatabaseConfiguration
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"com.github.sonus21.readwrite.repositories"})
@EntityScan(basePackages = "com.github.sonus21.readwrite.models.entities")
public class SqlDatabaseConfiguration {
private final DataSourceSecondaryConfig dataSourceSecondaryConfig;
private final DataSourcePrimaryConfig dataSourcePrimaryConfig;
@Autowired
public SqlDatabaseConfiguration(DataSourcePrimaryConfig dataSourcePrimaryConfig, DataSourceSecondaryConfig dataSourceSecondaryConfig) {
this.dataSourceSecondaryConfig = dataSourceSecondaryConfig;
this.dataSourcePrimaryConfig = dataSourcePrimaryConfig;
}
@Bean
protected DataSource primaryDatasource() {
return new HikariDataSource(dataSourcePrimaryConfig);
}
@Bean
protected DataSource secondaryDatasource() {
return new HikariDataSource(dataSourceSecondaryConfig);
}
@Bean
@Primary
public DataSource dataSource() {
Map<Object, Object> targetDataSources = new HashMap<>();
DataSource primary = primaryDatasource();
DataSource secondary = secondaryDatasource();
targetDataSources.put(Constants.PRIMARY, primary);
targetDataSources.put(Constants.SECONDARY, secondary);
DatabaseRouter router = new DatabaseRouter();
router.setTargetDataSources(targetDataSources);
router.setDefaultTargetDataSource(primary);
return router;
}
private Properties additionalProperties() {
Properties properties = new Properties();
//properties.setProperty("hibernate.hbm2ddl.auto", "create");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
properties.setProperty("hibernate.show_sql", "true");
return properties;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
entityManager.setDataSource(dataSource);
entityManager.setPersistenceProviderClass(HibernatePersistenceProvider.class);
entityManager.setPackagesToScan("com.github.sonus21.readwrite.models.entities");
entityManager.setJpaProperties(additionalProperties());
return entityManager;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment