Created
December 15, 2015 08:24
-
-
Save jumarko/a84d065b5c00a5cff811 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package travel.snapshot.dp.ota.configuration; | |
import org.apache.commons.dbcp2.ConnectionFactory; | |
import org.apache.commons.dbcp2.DriverManagerConnectionFactory; | |
import org.apache.commons.dbcp2.PoolableConnection; | |
import org.apache.commons.dbcp2.PoolableConnectionFactory; | |
import org.apache.commons.dbcp2.PoolingDataSource; | |
import org.apache.commons.pool2.ObjectPool; | |
import org.apache.commons.pool2.impl.GenericObjectPool; | |
import org.apache.commons.pool2.impl.GenericObjectPoolConfig; | |
import org.hibernate.jpa.HibernatePersistenceProvider; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.core.io.ClassPathResource; | |
import org.springframework.core.io.support.PropertiesLoaderUtils; | |
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; | |
import org.springframework.orm.jpa.JpaTransactionManager; | |
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; | |
import org.springframework.transaction.annotation.EnableTransactionManagement; | |
import java.io.IOException; | |
import java.sql.SQLException; | |
import java.util.Properties; | |
import javax.annotation.Resource; | |
import javax.sql.DataSource; | |
@Configuration | |
@EnableTransactionManagement | |
@EnableJpaRepositories(basePackages = "travel.snapshot.dp.ota.db.dal") | |
public class JPAConfiguration { | |
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver"; | |
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password"; | |
private static final String PROPERTY_NAME_DATABASE_URL = "db.url"; | |
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username"; | |
private static final String PROPERTY_NAME_DB_POOL_MAX_TOTAL = "db.pool.max_total"; | |
private static final String PROPERTY_NAME_DB_POOL_MAX_IDLE = "db.pool.max_idle"; | |
private static final String PROPERTY_NAME_DB_POOL_MIN_IDLE = "db.pool.min_idle"; | |
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan"; | |
@Resource(name = "dbProperties") | |
private Properties dbProperties; | |
@Bean | |
public Properties dbProperties() throws IOException { | |
return PropertiesLoaderUtils.loadProperties(new ClassPathResource("/db.properties")); | |
} | |
@Bean | |
public DataSource otaDataSource() throws ClassNotFoundException { | |
Class.forName(dbProperties.getProperty(PROPERTY_NAME_DATABASE_DRIVER)); | |
Properties dbConProperties = new Properties(); | |
dbConProperties.put("user", dbProperties.getProperty(PROPERTY_NAME_DATABASE_USERNAME)); | |
dbConProperties.put("password", dbProperties.getProperty(PROPERTY_NAME_DATABASE_PASSWORD)); | |
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory( | |
dbProperties.getProperty(PROPERTY_NAME_DATABASE_URL), dbConProperties); | |
PoolableConnectionFactory poolableConnectionFactory = | |
new PoolableConnectionFactory(connectionFactory, null); | |
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); | |
poolConfig.setMaxTotal(Integer.parseInt(dbProperties.getProperty(PROPERTY_NAME_DB_POOL_MAX_TOTAL))); | |
poolConfig.setMaxIdle(Integer.parseInt(dbProperties.getProperty(PROPERTY_NAME_DB_POOL_MAX_IDLE))); | |
poolConfig.setMinIdle(Integer.parseInt(dbProperties.getProperty(PROPERTY_NAME_DB_POOL_MIN_IDLE))); | |
poolConfig.setTestOnBorrow(true); | |
ObjectPool<PoolableConnection> connectionPool = | |
new GenericObjectPool<>(poolableConnectionFactory, poolConfig); | |
poolableConnectionFactory.setPool(connectionPool); | |
return new PoolingDataSource<>(connectionPool); | |
} | |
@Bean | |
public JpaTransactionManager transactionManager() { | |
return new JpaTransactionManager(); | |
} | |
@Bean | |
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource otaDataSource) throws ClassNotFoundException, SQLException { | |
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); | |
entityManagerFactoryBean.setDataSource(otaDataSource); | |
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class); | |
entityManagerFactoryBean | |
.setPackagesToScan(dbProperties.getProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN)); | |
entityManagerFactoryBean.setJpaProperties(dbProperties); | |
return entityManagerFactoryBean; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment