package com.dounine.corgi.jpa.boot.initializer;
import com.alibaba.druid.pool.DruidDataSource;
import com.dounine.corgi.jpa.boot.Constant;
import net.sf.ehcache.config.CacheConfiguration;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.cache.concurrent.ConcurrentMapCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import javax.persistence.EntityManagerFactory;
import java.util.*;
import static com.dounine.corgi.jpa.boot.Constant.SCAN_APP_PACKAGES;
/**
* Created by huanghuanlai on 16/8/17.
*/
public class Components {
@Bean
public DruidDataSource getDruid(Environment env) {
DruidDataSource dds = new DruidDataSource();
dds.setDriverClassName(env.getProperty("db.driver"));
dds.setUrl(env.getProperty("db.url"));
dds.setUsername(env.getProperty("db.username"));
dds.setPassword(env.getProperty("db.password"));
return dds;
}
/**
* 实体管理器
*
* @return
*/
@Bean(name = "entityManagerFactoryBean")
public LocalContainerEntityManagerFactoryBean getLCEMF(DruidDataSource druidDataSource) {
LocalContainerEntityManagerFactoryBean lcemf = new LocalContainerEntityManagerFactoryBean();
lcemf.setDataSource(druidDataSource);
lcemf.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
lcemf.setPackagesToScan(ArrayUtils.add(scanPackages(), SCAN_APP_PACKAGES));
return lcemf;
}
public String[] scanPackages() {
return new String[0];
}
@Bean(name = "entityManagerFactory")
public EntityManagerFactory entityManagerFactory(LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean) {
return localContainerEntityManagerFactoryBean.getNativeEntityManagerFactory();
}
/**
* 事务管理器
*
* @return
*/
@Bean(name = "transactionManager")
public JpaTransactionManager jpaTransactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);
return jpaTransactionManager;
}
/**
* 加载缓存配置
*
* @return
*/
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
List<Cache> caches = new ArrayList<>();
for (String cache_name : Constant.CACHE_NAME) {
caches.add(new ConcurrentMapCache(cache_name));
}
caches.addAll(initCaches());
cacheManager.setCaches(caches);
return cacheManager;
}
public List<Cache> initCaches() {
return new ArrayList<>(0);
}
}