package com.tz.erp;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.util.Properties;
/**
* spring框架配置类,等价于applicationContext.xml
*/
//表示该类是一个配置类
@Configuration
//配置注解扫描包,默认扫描当前类所在的包以及其子包,也可以自定义设置
@ComponentScan(basePackages={"com.tz.erp.dao","com.tz.erp.service","com.tz.erp.advice","com.tz.erp.interceptor"})
//导入外部配置文件
@PropertySource("classpath:dbconfig.properties")
//开启AOP
@EnableAspectJAutoProxy
//开启声明式事务
@EnableTransactionManagement
public class AppConfig {
private static final Logger LOGGER = Logger.getLogger(AppConfig.class);
@Autowired
Environment env;
/**
* 配置数据源实现类
*/
@Bean
public DataSource getDataSource() throws PropertyVetoException {//获取数据源
LOGGER.debug("getDataSource() run...");
/*//实例化BasicDataSource实例
BasicDataSource basicDataSource = new BasicDataSource();
// 设置各种参数
basicDataSource.setDriverClassName(env.getProperty("driverClass"));
basicDataSource.setUrl(env.getProperty("url"));
basicDataSource.setUsername(env.getProperty("user"));
basicDataSource.setPassword(env.getProperty("password"));
basicDataSource.setInitialSize(Integer.parseInt(env.getProperty("initialSize")));
return basicDataSource;*/
//实例化c3p0
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
comboPooledDataSource.setDriverClass(env.getProperty("driverClass"));
comboPooledDataSource.setJdbcUrl(env.getProperty("url"));
comboPooledDataSource.setUser(env.getProperty("user"));
comboPooledDataSource.setPassword(env.getProperty("password"));
return comboPooledDataSource;
}
/**
* SessionFactory的封装类(FactoryBean)
* 当被使用时,对外所暴露的是 org.hibernate.SessionFactory
*/
@Bean
public LocalSessionFactoryBean getLocalSessionFactoryBean() throws PropertyVetoException {
LOGGER.debug("getLocalSessionFactoryBean() run...");
//实例化
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
//设置数据源
localSessionFactoryBean.setDataSource(getDataSource());
//设置hibernate其他属性
Properties prop = new Properties();
prop.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
prop.setProperty("hibernate.cache.use_second_level_cache", "true");
prop.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
prop.setProperty("hibernate.cache.use_query_cache", "true");
prop.setProperty("hibernate.hbm2ddl.auto", "update");
prop.setProperty("hibernate.show_sql", "true");
prop.setProperty("hibernate.format_sql", "true");
prop.setProperty("hibernate.jdbc.batch_size", "50");
//把设置好的属性配置绑定到当前localSessionFactoryBean中
localSessionFactoryBean.setHibernateProperties(prop);
//设置扫描实体注解包
localSessionFactoryBean.setPackagesToScan("com.tz.erp.entity");
return localSessionFactoryBean;
}
@Bean
public HibernateTransactionManager getHibernateTransactionManager(SessionFactory sessionFactory) {
LOGGER.debug("getHibernateTransactionManager() run...");
HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager(sessionFactory);
return hibernateTransactionManager;
}
}
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.util.Properties;
/**
* spring框架配置类,等价于applicationContext.xml
*/
//表示该类是一个配置类
@Configuration
//配置注解扫描包,默认扫描当前类所在的包以及其子包,也可以自定义设置
@ComponentScan(basePackages={"com.tz.erp.dao","com.tz.erp.service","com.tz.erp.advice","com.tz.erp.interceptor"})
//导入外部配置文件
@PropertySource("classpath:dbconfig.properties")
//开启AOP
@EnableAspectJAutoProxy
//开启声明式事务
@EnableTransactionManagement
public class AppConfig {
private static final Logger LOGGER = Logger.getLogger(AppConfig.class);
@Autowired
Environment env;
/**
* 配置数据源实现类
*/
@Bean
public DataSource getDataSource() throws PropertyVetoException {//获取数据源
LOGGER.debug("getDataSource() run...");
/*//实例化BasicDataSource实例
BasicDataSource basicDataSource = new BasicDataSource();
// 设置各种参数
basicDataSource.setDriverClassName(env.getProperty("driverClass"));
basicDataSource.setUrl(env.getProperty("url"));
basicDataSource.setUsername(env.getProperty("user"));
basicDataSource.setPassword(env.getProperty("password"));
basicDataSource.setInitialSize(Integer.parseInt(env.getProperty("initialSize")));
return basicDataSource;*/
//实例化c3p0
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
comboPooledDataSource.setDriverClass(env.getProperty("driverClass"));
comboPooledDataSource.setJdbcUrl(env.getProperty("url"));
comboPooledDataSource.setUser(env.getProperty("user"));
comboPooledDataSource.setPassword(env.getProperty("password"));
return comboPooledDataSource;
}
/**
* SessionFactory的封装类(FactoryBean)
* 当被使用时,对外所暴露的是 org.hibernate.SessionFactory
*/
@Bean
public LocalSessionFactoryBean getLocalSessionFactoryBean() throws PropertyVetoException {
LOGGER.debug("getLocalSessionFactoryBean() run...");
//实例化
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
//设置数据源
localSessionFactoryBean.setDataSource(getDataSource());
//设置hibernate其他属性
Properties prop = new Properties();
prop.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
prop.setProperty("hibernate.cache.use_second_level_cache", "true");
prop.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
prop.setProperty("hibernate.cache.use_query_cache", "true");
prop.setProperty("hibernate.hbm2ddl.auto", "update");
prop.setProperty("hibernate.show_sql", "true");
prop.setProperty("hibernate.format_sql", "true");
prop.setProperty("hibernate.jdbc.batch_size", "50");
//把设置好的属性配置绑定到当前localSessionFactoryBean中
localSessionFactoryBean.setHibernateProperties(prop);
//设置扫描实体注解包
localSessionFactoryBean.setPackagesToScan("com.tz.erp.entity");
return localSessionFactoryBean;
}
@Bean
public HibernateTransactionManager getHibernateTransactionManager(SessionFactory sessionFactory) {
LOGGER.debug("getHibernateTransactionManager() run...");
HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager(sessionFactory);
return hibernateTransactionManager;
}
}