Java tutorial
/* * Copyright 2014 nateriver. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package be.bittich.quote.config; import com.jolbox.bonecp.BoneCPDataSource; import java.util.Properties; import javax.persistence.EntityManagerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.hibernate4.HibernateExceptionTranslator; import org.springframework.orm.jpa.JpaDialect; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaDialect; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * * @author nateriver */ @EnableTransactionManagement(proxyTargetClass = true) @EnableJpaRepositories("be.bittich.quote.dao") @ComponentScan("be.bittich.quote.service") @Configuration public class SpringJPAConfig { @Autowired private Environment env; public Environment getEnv() { return env; } public void setEnv(Environment env) { this.env = env; } /** * DataSource * * @return */ @Bean public BoneCPDataSource boneCPDataSource() { BoneCPDataSource boneCPDataSource = new BoneCPDataSource(); boneCPDataSource.setDriverClass(env.getProperty("jdbc.driver")); boneCPDataSource.setJdbcUrl(env.getProperty("jdbc.url")); boneCPDataSource.setUsername(env.getProperty("jdbc.username")); boneCPDataSource.setPassword(env.getProperty("jdbc.password")); boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60); boneCPDataSource.setIdleMaxAgeInMinutes(420); boneCPDataSource.setMaxConnectionsPerPartition(30); boneCPDataSource.setMinConnectionsPerPartition(10); boneCPDataSource.setPartitionCount(3); boneCPDataSource.setAcquireIncrement(5); boneCPDataSource.setStatementsCacheSize(100); return boneCPDataSource; } /** * Hibernate Exception translator * * @return */ @Bean public HibernateExceptionTranslator hibernateExceptionTranslator() { return new HibernateExceptionTranslator(); } /** * EntityManagerFactory Bean * * @param dataSource * @return */ @Bean @Autowired public EntityManagerFactory entityManagerFactory(BoneCPDataSource dataSource) { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setJpaVendorAdapter(vendorAdapter); factory.setPackagesToScan("be.bittich.quote.model"); factory.setDataSource(dataSource); factory.setJpaProperties(additionalProperties()); factory.afterPropertiesSet(); return factory.getObject(); } /** * Transaction Manager bean * * @param entityManagerFactory * @return */ @Bean @Autowired public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { JpaTransactionManager txManager = new JpaTransactionManager(); JpaDialect jpaDialect = new HibernateJpaDialect(); txManager.setEntityManagerFactory(entityManagerFactory); txManager.setJpaDialect(jpaDialect); return txManager; } Properties additionalProperties() { return new Properties() { { setProperty("hibernate.cache.use_second_level_cache", "true"); setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory"); setProperty("hibernate.hbm2ddl.auto", env.getProperty("database.hibernate.schema_update")); setProperty("hibernate.dialect", env.getProperty("database.hibernate.dialect")); setProperty("hibernate.show_sql", env.getProperty("database.hibernate.show_sql")); setProperty("hibernate.format_sql", env.getProperty("database.hibernate.format_sql")); setProperty("hibernate.use_sql_comments", env.getProperty("database.hibernate.use_sql_comments")); } }; } }