package be.mentoringsystems.merke.config; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * * @author anthonyarents */ @Configuration @EnableTransactionManagement public class DatabaseConfiguration { @Value("#{contextParameters.database_catalog}") private String dbName; @Value("#{contextParameters.database_user}") private String dbUser; @Value("#{contextParameters.database_password}") private String dbPass; @Value("#{contextParameters.database_jdbc}") private String dbJdbc; @Value("#{contextParameters.searchindexPath}") private String searchindexPath; private static final int DSPOOL_MAX_IDLE = 17; private static final int DSPOOL_MAX_TOTAL = 20; private static final int DSPOOL_MAX_WAIT_MILLIS = 10000; @Bean public DataSource dataSource() { final BasicDataSource bds = new BasicDataSource(); bds.setUsername(dbUser); bds.setPassword(dbPass); bds.setDefaultCatalog(dbName); bds.setUrl(dbJdbc); bds.setDriverClassName("com.mysql.cj.jdbc.Driver"); bds.setMaxIdle(DSPOOL_MAX_IDLE); bds.setMaxTotal(DSPOOL_MAX_TOTAL); bds.setMaxWaitMillis(DSPOOL_MAX_WAIT_MILLIS); bds.setValidationQuery("SELECT 1;"); bds.setTestOnBorrow(true); bds.setRemoveAbandonedOnBorrow(true); return bds; } private Properties getHibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); properties.put("hibernate.show_sql", false); properties.put("hibernate.format_sql", false); properties.put("hibernate.connection.useUnicode", true); properties.put("hibernate.connection.characterEncoding", "utf8"); properties.put("hibernate.connection.charSet", "utf8"); properties.put("hibernate.search.default.directory_provider", "filesystem"); properties.put("hibernate.search.default.indexBase", searchindexPath); return properties; } @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setAnnotatedPackages(new String[]{"be.mentoringsystems.merke.model.db"}); sessionFactory.setPackagesToScan(new String[]{"be.mentoringsystems.merke.model.db"}); sessionFactory.setHibernateProperties(getHibernateProperties()); return sessionFactory; } @Bean @Autowired public HibernateTransactionManager transactionManager(final SessionFactory s) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(s); return txManager; } }