SpringBoot 数据源配置

SpringBoot 数据源配置

SpringBoot单数据源配置

DataSourceConfig.java

package com.haixiangpuhui.credit.web.warehouse.consumer.config.db;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;
import com.haixiangpuhui.credit.web.warehouse.consumer.config.properties.DataBaseProperties;

/**
 * 数据源配置类
 * 
 * @author HX-011
 *
 */
@Configuration
@MapperScan(basePackages = DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "sqlSessionFactory")
public class DataSourceConfig {
	public static final String PACKAGE = "com.haixiangpuhui.credit.web.warehouse.consumer.mapper";
	public static final String MAPPER_LOCATION = "classpath:mybatis/*.xml";
	public static final String TYPE_ALIASES_PACKAGE = "com.haixiangpuhui.credit.web.warehouse.consumer.domain,"
			+ "com.haixiangpuhui.credit.web.warehouse.consumer.form,"
			+ "com.haixiangpuhui.credit.web.warehouse.consumer.vo";

	@Autowired
	private DataBaseProperties dataBaseProperties;

	@Bean(name = "dataSource")
	public DataSource dataSource() throws SQLException {
		DruidDataSource dataSource = new DruidDataSource();
		//使用属性copy 类型必须一样
		// BeanUtils.copyProperties(dataBaseProperties, dataSource);

		dataSource.setUrl(dataBaseProperties.getUrl());
		dataSource.setDriverClassName(dataBaseProperties.getDriverClassName());
		dataSource.setUsername(dataBaseProperties.getUsername());
		dataSource.setPassword(dataBaseProperties.getPassword());
		dataSource.setInitialSize(dataBaseProperties.getInitialSize());
		dataSource.setMinIdle(dataBaseProperties.getMinIdle());
		dataSource.setMaxActive(dataBaseProperties.getMaxActive());
		dataSource.setMaxWait(dataBaseProperties.getMaxWait());
		dataSource.setTimeBetweenEvictionRunsMillis(dataBaseProperties.getTimeBetweenEvictionRunsMillis());
		dataSource.setMinEvictableIdleTimeMillis(dataBaseProperties.getMinEvictableIdleTimeMillis());
		dataSource.setValidationQuery(dataBaseProperties.getValidationQuery());
		dataSource.setTestWhileIdle(dataBaseProperties.getTestWhileIdle());
		dataSource.setTestOnBorrow(dataBaseProperties.getTestOnBorrow());
		dataSource.setTestOnReturn(dataBaseProperties.getTestOnReturn());
		dataSource.setFilters(dataBaseProperties.getFilters());
		return dataSource;
	}

	@Bean(name = "transactionManager")
	public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource)
			throws Exception {
		return new DataSourceTransactionManager(dataSource);
	}

	@Bean(name = "sqlSessionFactory")
	public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) 
			throws Exception {
		SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		sessionFactory.setDataSource(dataSource);
		sessionFactory.setTypeAliasesPackage(DataSourceConfig.TYPE_ALIASES_PACKAGE);
		sessionFactory.setMapperLocations(
				new PathMatchingResourcePatternResolver().getResources(DataSourceConfig.MAPPER_LOCATION));
		return sessionFactory.getObject();
	}
}
DataBaseProperties.java
package com.haixiangpuhui.credit.web.warehouse.consumer.config.properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * 数据源配置
 * @author HX-011
 *
 */
@Component
@PropertySource(value="config/database.properties")
public class DataBaseProperties {
    @Value("${database.driver}")
    private String driverClassName;
    @Value("${database.url}")
    private String url;
    @Value("${database.username}")
    private String username;
    @Value("${database.password}")
    private String password;
    //<!-- 配置初始化大小、最小、最大 -->
    @Value("${dataSource.initialSize}")
    private int initialSize;
    @Value("${dataSource.minIdle}")
    private int minIdle;
    @Value("${dataSource.maxActive}")
    private int maxActive;
    
    //<!-- 配置获取连接等待超时的时间 -->
    private long maxWait = 60000;
    //<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    private long timeBetweenEvictionRunsMillis = 60000;
    //<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    private long minEvictableIdleTimeMillis = 300000;
    
    private String validationQuery = "SELECT 'x'";
    private boolean testWhileIdle = true;
    private boolean testOnBorrow = false;
    private boolean testOnReturn = false;
    //<!-- 配置监控统计拦截的filters -->
    private String filters = "stat";

	public String getDriverClassName() {
		return driverClassName;
	}
	public String getUrl() {
		return url;
	}
	public String getUsername() {
		return username;
	}
	public String getPassword() {
		return password;
	}
	public int getInitialSize() {
		return initialSize;
	}
	public int getMinIdle() {
		return minIdle;
	}
	public int getMaxActive() {
		return maxActive;
	}
	public long getMaxWait() {
		return maxWait;
	}
	public long getTimeBetweenEvictionRunsMillis() {
		return timeBetweenEvictionRunsMillis;
	}
	public long getMinEvictableIdleTimeMillis() {
		return minEvictableIdleTimeMillis;
	}
	public String getValidationQuery() {
		return validationQuery;
	}
	public boolean getTestWhileIdle() {
		return testWhileIdle;
	}
	public boolean getTestOnBorrow() {
		return testOnBorrow;
	}
	public boolean getTestOnReturn() {
		return testOnReturn;
	}
	public String getFilters() {
		return filters;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_18600061/article/details/80227202