spring 框架配置类

来源:互联网 发布:儋州市政务网通知公布 编辑:程序博客网 时间:2024/05/21 22:27
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;
    }
}

原创粉丝点击