[DateSouece – 1]
@Configuration
@EnableJpaRepositories(
basePackages = “com.haii.hmt.component.business.entity.admin”,
entityManagerFactoryRef = “adminEntityManager”,
transactionManagerRef = “adminTransactionManager”
)
public class AdminDataConfig
{
@Inject
private AdminDatasourceProp adminDatasourceProp;
@Inject
private JpaHibernateProp jpaHibernateProp;
@Inject
private HikariConnectionPoolProp hikariConnectionPoolProp;
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean adminEntityManager() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(adminDataSource());
em.setPackagesToScan(
new String[] { “com.hi.entity” });
HibernateJpaVendorAdapter vendorAdapter
= new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put(“hibernate.hbm2ddl.auto”, this.jpaHibernateProp.getDdlAauto() );
properties.put(“hibernate.dialect”, this.jpaHibernateProp.getDialect() );
em.setJpaPropertyMap(properties);
return em;
}
@Primary
@Bean
public DataSource adminDataSource() {
HikariDataSource ds = new HikariDataSource();
ds.setDataSourceProperties(this.getProperties());
ds.setPoolName( this.adminDatasourceProp.getPoolName());
//ds.setConnectionTestQuery(datasourceProperties.getConnectionTes\
// tQuery());
ds.setDataSourceClassName( this.adminDatasourceProp.getDataSourceClassName());
//ds.setIdleTimeout(datasourceProperties.getIdleTimeout());
ds.setMaximumPoolSize( this.hikariConnectionPoolProp.getMaximumPoolSize() );
return ds;
}
private Properties getProperties()
{
Properties prop = new Properties();
prop.put(“serverName”, this.adminDatasourceProp.getServerName() );
prop.put(“databaseName”, this.adminDatasourceProp.getDatabaseName());
prop.put(“user”, this.adminDatasourceProp.getUsername());
prop.put(“password”, this.adminDatasourceProp.getPassword());
prop.put(“cachePrepStmts”, “true”);
prop.put(“prepStmtCacheSize”, “250”);
prop.put(“prepStmtCacheSqlLimit”, “2048”);
prop.put(“encoding”, “UTF-8”);
return prop;
}
@Primary
@Bean
public PlatformTransactionManager adminTransactionManager() {
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
adminEntityManager().getObject());
return transactionManager;
}
}
[DataSource – 2]
@Configuration
@EnableJpaRepositories(
basePackages = “com.hello.entity”,
entityManagerFactoryRef = “userEntityManager”,
transactionManagerRef = “userTransactionManager”
)
public class SensorDataConfig
{
@Inject
private UserDatasourceProp userDatasourceProp;
@Inject
private JpaHibernateProp jpaHibernateProp;
@Inject
private HikariConnectionPoolProp hikariConnectionPoolProp;
@Bean
public LocalContainerEntityManagerFactoryBean userEntityManager() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(userDataSource());
em.setPackagesToScan(
new String[] { “com.haii.hmt.component.business.entity.sensor” });
HibernateJpaVendorAdapter vendorAdapter
= new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put(“hibernate.hbm2ddl.auto”, this.jpaHibernateProp.getDdlAauto() );
properties.put(“hibernate.dialect”, this.jpaHibernateProp.getDialect() );
em.setJpaPropertyMap(properties);
return em;
}
public DataSource userDataSource() {
HikariDataSource ds = new HikariDataSource();
ds.setDataSourceProperties(this.getProperties());
ds.setPoolName( this.userDatasourceProp.getPoolName());
//ds.setConnectionTestQuery(datasourceProperties.getConnectionTes\
// tQuery());
ds.setDataSourceClassName( this.userDatasourceProp.getDataSourceClassName());
//ds.setIdleTimeout(datasourceProperties.getIdleTimeout());
ds.setMaximumPoolSize( this.hikariConnectionPoolProp.getMaximumPoolSize() );
return ds;
}
private Properties getProperties()
{
Properties prop = new Properties();
prop.put(“serverName”, this.userDatasourceProp.getServerName() );
prop.put(“databaseName”, this.userDatasourceProp.getDatabaseName());
prop.put(“user”, this.userDatasourceProp.getUsername());
prop.put(“password”, this.userDatasourceProp.getPassword());
prop.put(“cachePrepStmts”, “true”);
prop.put(“prepStmtCacheSize”, “250”);
prop.put(“prepStmtCacheSqlLimit”, “2048”);
prop.put(“encoding”, “UTF-8”);
return prop;
}
@Bean
public PlatformTransactionManager userTransactionManager() {
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
userEntityManager().getObject());
return transactionManager;
}
}]
[Apply Transactional ]
@Transactional("userTransactionManager")
public void whenCreatingUsersWithSameEmail_thenRollback() { User user1 = new User(); user1.setName("John"); user1.setEmail("john@test.com"); user1.setAge(20); user1 = userRepository.save(user1); assertNotNull(userRepository.findOne(user1.getId())); User user2 = new User(); user2.setName("Tom"); user2.setEmail("john@test.com"); user2.setAge(10); try { user2 = userRepository.save(user2); } catch (DataIntegrityViolationException e) { } assertNull(userRepository.findOne(user2.getId())); }