[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()));
    }
 

Leave a Reply

Your email address will not be published. Required fields are marked *