package com.bytestree.config; import java.util.Properties; import javax.sql.DataSource; import org.hibernate.SessionFactory; import org.hibernate.cfg.AvailableSettings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * * @author bytesTree * @see <a href="http://www.bytestree.com/">BytesTree</a> * */ @Configuration @EnableTransactionManagement @PropertySource(value = { "classpath:application.properties" }) public class HibernateConfig { @Autowired private Environment env; /** * Initialize dataSource * * @return DataSource */ @Bean public DataSource getDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(env.getRequiredProperty("datasource.driver")); dataSource.setUrl(env.getRequiredProperty("datasource.url")); dataSource.setUsername(env.getRequiredProperty("datasource.username")); dataSource.setPassword(env.getRequiredProperty("datasource.password")); return dataSource; } /** * Initialize hibernate properties * * @return Properties */ private Properties getHibernateProperties() { Properties properties = new Properties(); properties.put(AvailableSettings.DIALECT, env.getRequiredProperty("hibernate.dialect")); properties.put(AvailableSettings.SHOW_SQL, env.getRequiredProperty("hibernate.show_sql")); properties.put(AvailableSettings.STATEMENT_BATCH_SIZE, env.getRequiredProperty("hibernate.batch.size")); properties.put(AvailableSettings.HBM2DDL_AUTO, env.getRequiredProperty("hibernate.hbm2ddl.auto")); properties.put(AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS, env.getRequiredProperty("hibernate.current.session.context.class")); return properties; } @Bean public LocalSessionFactoryBean getSessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(getDataSource()); sessionFactory.setPackagesToScan(new String[] { "com.bytestree.model" }); sessionFactory.setHibernateProperties(getHibernateProperties()); return sessionFactory; } /** * Initialize Transaction Manager * * @param sessionFactory * @return HibernateTransactionManager */ @Bean public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(sessionFactory); return txManager; } }