整合smm框架的配置,实现参数可配置的热插拔式组件

This commit is contained in:
lsy
2017-09-09 18:41:17 +08:00
parent 257538239c
commit 1a27376dd7
6 changed files with 270 additions and 42 deletions
@@ -4,6 +4,9 @@ import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
import com.micro.fast.common.config.param.DruidParamConfig;
import com.micro.fast.common.config.param.JdbcConnectionParamConfig;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
@@ -16,6 +19,7 @@ import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -33,7 +37,10 @@ public class DataSourceConfig {
private static final Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);
@Autowired
private JdbcConnectionConfig jdbcConnectionConfig;
private JdbcConnectionParamConfig jdbcConnectionParamConfig;
@Autowired
private DruidParamConfig druidParamConfig;
/**
* druid的servlet的配置
@@ -42,23 +49,37 @@ public class DataSourceConfig {
@Bean
public ServletRegistrationBean servletRegistrationBean(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
//注册servlet
//1.注册servlet
servletRegistrationBean.setServlet(new StatViewServlet());
//设置servlet初始化的参数
//2.设置servlet初始化的参数,如果传入了参数默认的配置就不会生效
Map<String,String> initParams = new HashMap<>();
//设置登录密码
initParams.put("loginUsername","root");
initParams.put("loginPassword","studyj2e");
//设置能否重置
initParams.put("resetEnable","false");
//deny优先于allow
initParams.put("allow","127.0.0.1");
initParams.put("deny","213.122.232.233");
ArrayList<String> servletInitParams = druidParamConfig.getServletInitParams();
if (servletInitParams!=null&&!servletInitParams.isEmpty()){
for (String param: servletInitParams) {
String[] keyValue = param.split(":");
initParams.put(keyValue[0],keyValue[1]);
}
}else{
//设置登录密码
initParams.put("loginUsername","micro");
initParams.put("loginPassword","fast");
//设置能否重置
initParams.put("resetEnable","false");
//deny优先于allow
initParams.put("allow","127.0.0.1");
//initParams.put("deny","213.122.232.233");
}
servletRegistrationBean.setInitParameters(initParams);
//设置servlet的地址
servletRegistrationBean.addUrlMappings("/druid/*");
//3.设置访问druid的servlet的地址
String servletUrl = druidParamConfig.getServletUrl();
if (servletUrl !=null){
servletRegistrationBean.addUrlMappings(servletUrl);
}else {
servletRegistrationBean.addUrlMappings("/druid/*");
}
return servletRegistrationBean;
}
@@ -96,8 +117,11 @@ public class DataSourceConfig {
public BeanNameAutoProxyCreator beanNameAutoProxyCreator(){
BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();
beanNameAutoProxyCreator.setProxyTargetClass(true);
//设置要监控的bean的id
beanNameAutoProxyCreator.setBeanNames("userController");
//设置要监控的bean的id,多个请使用逗号分割
String beanNames = druidParamConfig.getBeanNames();
if (StringUtils.isNotEmpty(beanNames)){
beanNameAutoProxyCreator.setBeanNames(beanNames);
}
//要使用的拦截器
beanNameAutoProxyCreator.setInterceptorNames("druid-stat-interceptor");
return beanNameAutoProxyCreator;
@@ -108,17 +132,47 @@ public class DataSourceConfig {
public DataSource druidDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
//数据库连接的相关配置
druidDataSource.setUsername(jdbcConnectionConfig.getUsername());
druidDataSource.setPassword(jdbcConnectionConfig.getPassword());
druidDataSource.setUrl(jdbcConnectionConfig.getUrl());
druidDataSource.setDriverClassName(jdbcConnectionConfig.getDriverClass());
druidDataSource.setUsername(jdbcConnectionParamConfig.getUsername());
druidDataSource.setPassword(jdbcConnectionParamConfig.getPassword());
druidDataSource.setUrl(jdbcConnectionParamConfig.getUrl());
druidDataSource.setDriverClassName(jdbcConnectionParamConfig.getDriverClass());
//连接池的具体配置
druidDataSource.setDefaultAutoCommit(true);
druidDataSource.setInitialSize(20);
druidDataSource.setMaxActive(50);
druidDataSource.setMinIdle(10);
druidDataSource.setMaxWait(10);
druidDataSource.setMinEvictableIdleTimeMillis(3600000);
if (druidParamConfig.getDefaultAutoCommit()!=null){
druidDataSource.setDefaultAutoCommit(druidParamConfig.getDefaultAutoCommit());
}else{
druidDataSource.setDefaultAutoCommit(true);
}
if (druidParamConfig.getInitialSize()!=null){
druidDataSource.setInitialSize(druidParamConfig.getInitialSize());
}else {
druidDataSource.setInitialSize(20);
}
if(druidParamConfig.getMaxActive()!=null){
druidDataSource.setMaxActive(druidParamConfig.getMaxActive());
}else{
druidDataSource.setMaxActive(50);
}
if(druidParamConfig.getMinIdle()!=null){
druidDataSource.setMinIdle(druidParamConfig.getMinIdle());
}else{
druidDataSource.setMinIdle(10);
}
if(druidParamConfig.getMaxWait()!=null){
druidDataSource.setMaxWait(druidParamConfig.getMaxWait());
}else{
druidDataSource.setMaxWait(1000);
}
if(druidParamConfig.getMinEvictableIdleTimeMillis()!=null){
druidDataSource.setMinEvictableIdleTimeMillis(druidParamConfig.getMinEvictableIdleTimeMillis());
}else{
druidDataSource.setMinEvictableIdleTimeMillis(3600000);
}
try {
druidDataSource.setFilters("stat,wall");
} catch (SQLException e) {
@@ -1,11 +0,0 @@
package com.micro.fast.common.config;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties
@AutoConfigureBefore(com.micro.fast.common.config.DataSourceConfig.class)
public class DruidConfig {
}
@@ -1,6 +1,7 @@
package com.micro.fast.common.config;
import com.github.pagehelper.PageHelper;
import com.micro.fast.common.config.param.MybatisParamConfig;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
@@ -17,6 +18,7 @@ import org.springframework.transaction.annotation.TransactionManagementConfigure
import javax.sql.DataSource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;
/**
@@ -33,6 +35,8 @@ import java.util.Properties;
public class SqlSessionFactoryConfig implements TransactionManagementConfigurer{
@Autowired
private DataSource dataSource;
@Autowired
private MybatisParamConfig mybatisParamConfig;
@Bean(name = "sqlSessionFactory")
@Primary
@@ -41,25 +45,39 @@ public class SqlSessionFactoryConfig implements TransactionManagementConfigurer{
//注入数据源
sqlSessionFactoryBean.setDataSource(dataSource);
//设置实体类所在的位置
sqlSessionFactoryBean.setTypeAliasesPackage("com.micro.fast.upms.pojo");
sqlSessionFactoryBean.setTypeAliasesPackage(mybatisParamConfig.getTypeAliasesPackage());
//sqlSessionFactoryBean.setTypeAliasesPackage("com.micro.fast.upms.pojo");
//设置mapper映射文件的位置
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
sqlSessionFactoryBean.setMapperLocations(
resolver.getResources("classpath:/mappers/*.xml"));
resolver.getResources(mybatisParamConfig.getMappers()));
//resolver.getResources("classpath:/mappers/*.xml"));
} catch (IOException e) {
e.printStackTrace();
}
//设置分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("dialect","mysql");
ArrayList<String> pageHelperProperties = mybatisParamConfig.getPageHelperProperties();
if (pageHelperProperties!=null&&!pageHelperProperties.isEmpty()){
for (String param :
pageHelperProperties) {
String[] keyValue = param.split(":");
properties.setProperty(keyValue[0],keyValue[1]);
}
}else{
properties.setProperty("dialect","mysql");
}
pageHelper.setProperties(properties);
sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});
//设置详细的配置
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
//开启下划线转驼峰命名
configuration.setMapUnderscoreToCamelCase(true);
//开启列别名
configuration.setUseColumnLabel(true);
//使用自动的主键生成
configuration.setUseGeneratedKeys(true);
//将详细配置放入到sqlSessionFactoryBean中
sqlSessionFactoryBean.setConfiguration(configuration);
@@ -73,7 +91,6 @@ public class SqlSessionFactoryConfig implements TransactionManagementConfigurer{
}
/**
* 向事务管理器中注入数据源,由spring来进行事务管理
*/
@@ -0,0 +1,120 @@
package com.micro.fast.common.config.param;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
/**
* druid数据库连接池的相关配置参数
* create by lishouyu 2017/09/09
* email 18332763730@163.com
*
* last edit lishouyu 2017/09/09
* email 18332763730@163.com
*
*/
@Configuration
@AutoConfigureBefore(com.micro.fast.common.config.DataSourceConfig.class)
@ConfigurationProperties(prefix = "druid")
public class DruidParamConfig {
//druid数据连接池的servlet的初始化参数
private ArrayList<String> servletInitParams;
//druid数据库连接池的访问路径
private String servletUrl;
//druid要监控的bean的名字,多个使用逗号分割
private String beanNames;
//事务是否自动提交
private Boolean defaultAutoCommit;
//连接池的初始化大小
private Integer initialSize;
//连接池的最大的数量
private Integer maxActive;
//连接池的最小空闲数量
private Integer minIdle;
//当连接池中连接已经用完了,等待建立一个新连接的最大毫秒数
private Integer maxWait;
//到达多长时间释放连接池
private Integer minEvictableIdleTimeMillis;
public ArrayList<String> getServletInitParams() {
return servletInitParams;
}
public void setServletInitParams(ArrayList<String> servletInitParams) {
this.servletInitParams = servletInitParams;
}
public String getServletUrl() {
return servletUrl;
}
public void setServletUrl(String servletUrl) {
this.servletUrl = servletUrl;
}
public String getBeanNames() {
return beanNames;
}
public void setBeanNames(String beanNames) {
this.beanNames = beanNames;
}
public Boolean getDefaultAutoCommit() {
return defaultAutoCommit;
}
public void setDefaultAutoCommit(Boolean defaultAutoCommit) {
this.defaultAutoCommit = defaultAutoCommit;
}
public Integer getInitialSize() {
return initialSize;
}
public void setInitialSize(Integer initialSize) {
this.initialSize = initialSize;
}
public Integer getMaxActive() {
return maxActive;
}
public void setMaxActive(Integer maxActive) {
this.maxActive = maxActive;
}
public Integer getMinIdle() {
return minIdle;
}
public void setMinIdle(Integer minIdle) {
this.minIdle = minIdle;
}
public Integer getMaxWait() {
return maxWait;
}
public void setMaxWait(Integer maxWait) {
this.maxWait = maxWait;
}
public Integer getMinEvictableIdleTimeMillis() {
return minEvictableIdleTimeMillis;
}
public void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}
}
@@ -1,4 +1,4 @@
package com.micro.fast.common.config;
package com.micro.fast.common.config.param;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull;
@AutoConfigureBefore(com.micro.fast.common.config.DataSourceConfig.class)
@ConfigurationProperties(prefix = "jdbc")
@Validated
public class JdbcConnectionConfig {
public class JdbcConnectionParamConfig {
@NotNull
private String username;
@NotNull
@@ -0,0 +1,48 @@
package com.micro.fast.common.config.param;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
@Configuration
@AutoConfigureBefore(com.micro.fast.common.config.SqlSessionFactoryConfig.class)
@ConfigurationProperties(prefix = "mybatis")
@Validated
public class MybatisParamConfig {
//pojo所在的包
@NotNull
private String typeAliasesPackage;
//映射文件所在的文件路径
@NotNull
private String mappers;
//分页插件的参数设置
private ArrayList<String> pageHelperProperties;
public String getTypeAliasesPackage() {
return typeAliasesPackage;
}
public void setTypeAliasesPackage(String typeAliasesPackage) {
this.typeAliasesPackage = typeAliasesPackage;
}
public String getMappers() {
return mappers;
}
public void setMappers(String mappers) {
this.mappers = mappers;
}
public ArrayList<String> getPageHelperProperties() {
return pageHelperProperties;
}
public void setPageHelperProperties(ArrayList<String> pageHelperProperties) {
this.pageHelperProperties = pageHelperProperties;
}
}