All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kim.sesame.framework.mybatis.config.DataSourcesConfig Maven / Gradle / Ivy

The newest version!
package kim.sesame.framework.mybatis.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;

import javax.annotation.Resource;
import java.sql.SQLException;

/**
 * 数据源配置
 * 
 * @author johnny
 * date :  2017年6月12日 上午11:25:48
 * Description:
 */
@Configuration
public class DataSourcesConfig {

	@Resource
	private Environment environment;
	@Resource
	private DruidProperties druidProperties;

	/**
	 * druid初始化
	 * 
	 * @author johnny
	 * date :  2017年6月12日 上午11:26:03
	 * @return 11
	 * @throws SQLException
	 *             DruidDataSource
	 */
	@Primary // 默认数据源
	@Bean(name = "dataSource", destroyMethod = "close")
	public DruidDataSource Construction() throws SQLException {
		DruidDataSource dataSource = new DruidDataSource();

		dataSource.setUrl(environment.getProperty("spring.datasource.url"));
		dataSource.setUsername(environment.getProperty("spring.datasource.username"));
		dataSource.setPassword(environment.getProperty("spring.datasource.password"));
		// dataSource.setDriverClassName(environment.getProperty("spring.datasource.driverClassName"));

		// 配置最大连接
		dataSource.setMaxActive(20);
		// 配置初始连接
		dataSource.setInitialSize(1);
		// 配置最小连接
		dataSource.setMinIdle(1);
		// 连接等待超时时间
		dataSource.setMaxWait(60000);
		// 间隔多久进行检测,关闭空闲连接
		dataSource.setTimeBetweenEvictionRunsMillis(60000);
		// 一个连接最小生存时间
		dataSource.setMinEvictableIdleTimeMillis(300000);
		// 用来检测是否有效的sql
		dataSource.setValidationQuery("select 'x'");
		dataSource.setTestWhileIdle(true);
		dataSource.setTestOnBorrow(false);
		dataSource.setTestOnReturn(false);
		// 打开PSCache,并指定每个连接的PSCache大小
		dataSource.setPoolPreparedStatements(true);
		dataSource.setMaxOpenPreparedStatements(20);
		// 配置sql监控的filter
		if (druidProperties.isDruidEnabled()) {
			dataSource.setFilters("stat,wall,log4j");
		}
		try {
			dataSource.init();
		} catch (SQLException e) {
			throw new RuntimeException("druid datasource init fail");
		}
		return dataSource;
	}

	/**
	 * druid监控
	 * 
	 * @return
	 */
	@Bean
	@ConditionalOnProperty(prefix = "sesame.framework.mybatis", name = "druid-enabled", havingValue = "true")
	public ServletRegistrationBean druidServlet() {
		ServletRegistrationBean reg = new ServletRegistrationBean();
		reg.setServlet(new StatViewServlet());
		reg.addUrlMappings("/druid/*");
		// -- reg.addInitParameter("allow", "127.0.0.1");
		// -- reg.addInitParameter("deny","");
		reg.addInitParameter("loginUsername", druidProperties.getDruidLoginName());
		reg.addInitParameter("loginPassword", druidProperties.getDruidLoginPwd());
		return reg;
	}

	/**
	 * druid监控过滤
	 * 
	 * @return
	 */
	@Bean
	@ConditionalOnProperty(prefix = "sesame.framework.mybatis", name = "druid-enabled", havingValue = "true")
	public FilterRegistrationBean filterRegistrationBean() {
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
		filterRegistrationBean.setFilter(new WebStatFilter());
		filterRegistrationBean.addUrlPatterns("/*");
		filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
		return filterRegistrationBean;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy