163 lines
7.5 KiB
Java
163 lines
7.5 KiB
Java
package com.ydw.bat.wkflow.config;
|
|
|
|
import com.alibaba.druid.filter.Filter;
|
|
import com.alibaba.druid.filter.logging.Slf4jLogFilter;
|
|
import com.alibaba.druid.filter.stat.StatFilter;
|
|
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.alibaba.druid.wall.WallConfig;
|
|
import com.alibaba.druid.wall.WallFilter;
|
|
import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
|
|
import org.springframework.boot.context.properties.bind.BindResult;
|
|
import org.springframework.boot.context.properties.bind.Binder;
|
|
import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
|
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
|
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
|
import org.springframework.context.EnvironmentAware;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.core.env.Environment;
|
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
|
|
import javax.sql.DataSource;
|
|
import java.sql.SQLException;
|
|
import java.util.*;
|
|
|
|
@Configuration
|
|
@EnableTransactionManagement
|
|
public class DruidDataSourceConfig implements EnvironmentAware {
|
|
private Properties propertyResolver;
|
|
|
|
private Properties configResolver;
|
|
|
|
public DruidDataSourceConfig() {
|
|
}
|
|
|
|
public void setEnvironment(Environment env) {
|
|
Iterable sources = ConfigurationPropertySources.get(env);
|
|
Binder binder = new Binder(sources);
|
|
BindResult<Properties> propertyResolverBind = binder.bind("spring.datasource", Properties.class);
|
|
BindResult<Properties> configResolverBind = binder.bind("spring.profiles", Properties.class);
|
|
|
|
propertyResolver= propertyResolverBind.get();
|
|
configResolver = configResolverBind.get();
|
|
}
|
|
|
|
|
|
@Bean(
|
|
name = {"dataSource"}
|
|
)
|
|
public DataSource dataSource() throws SQLException {
|
|
DruidDataSource datasource = new DruidDataSource();
|
|
datasource.setUrl(this.propertyResolver.getProperty("url"));
|
|
datasource.setDriverClassName(this.propertyResolver.getProperty("driver-class-name"));
|
|
datasource.setUsername(this.propertyResolver.getProperty("username"));
|
|
datasource.setPassword(this.propertyResolver.getProperty("password"));
|
|
datasource.setInitialSize(Integer.valueOf(this.propertyResolver.getProperty("initialSize")));
|
|
datasource.setMinIdle(Integer.valueOf(this.propertyResolver.getProperty("minIdle")));
|
|
datasource.setMaxWait(Long.valueOf(this.propertyResolver.getProperty("maxWait")));
|
|
datasource.setMaxActive(Integer.valueOf(this.propertyResolver.getProperty("maxActive")));
|
|
datasource.setTimeBetweenEvictionRunsMillis(Long.valueOf(this.propertyResolver.getProperty("timeBetweenEvictionRunsMillis")));
|
|
datasource.setMinEvictableIdleTimeMillis(Long.valueOf(this.propertyResolver.getProperty("minEvictableIdleTimeMillis")));
|
|
// datasource.setRemoveAbandoned(Boolean.valueOf(this.propertyResolver.getProperty("removeAbandoned")));
|
|
// datasource.setRemoveAbandonedTimeout(Integer.valueOf(this.propertyResolver.getProperty("removeAbandonedTimeout")));
|
|
datasource.setTestOnBorrow(Boolean.valueOf(this.propertyResolver.getProperty("testOnBorrow")));
|
|
datasource.setTestOnReturn(Boolean.valueOf(this.propertyResolver.getProperty("testOnReturn")));
|
|
datasource.setTestWhileIdle(Boolean.valueOf(this.propertyResolver.getProperty("testWhileIdle")));
|
|
datasource.setValidationQuery(this.propertyResolver.getProperty("validationQuery"));
|
|
// datasource.setValidationQueryTimeout(Integer.valueOf(this.propertyResolver.getProperty("validationQueryTimeout")));
|
|
// datasource.setKeepAlive(Boolean.valueOf(this.propertyResolver.getProperty("keepAlive")));
|
|
// if("prd".equals(this.configResolver.getProperty("active"))){
|
|
// datasource.setConnectProperties(this.connectionProper());
|
|
// }
|
|
// datasource.setConnectProperties(this.connectionProper());
|
|
List<Filter> filters = new ArrayList();
|
|
filters.add(this.wallFilter());
|
|
filters.add(this.statFilter());
|
|
filters.add(this.slf4jLogFilter());
|
|
// if("prd".equals(this.configResolver.getProperty("active"))){
|
|
// filters.add(new ConfigFilter());
|
|
// }
|
|
// filters.add(new ConfigFilter());
|
|
datasource.setProxyFilters(filters);
|
|
// 启动时自动初始化维护连接
|
|
datasource.init();
|
|
return datasource;
|
|
}
|
|
|
|
@Bean
|
|
public StatFilter statFilter() {
|
|
StatFilter statFilter = new StatFilter();
|
|
statFilter.setMergeSql(Boolean.valueOf(this.propertyResolver.getProperty("mergeSql")));
|
|
statFilter.setSlowSqlMillis(Long.valueOf(this.propertyResolver.getProperty("slowSqlMillis")));
|
|
statFilter.setLogSlowSql(Boolean.valueOf(this.propertyResolver.getProperty("logSlowSql")));
|
|
return statFilter;
|
|
}
|
|
|
|
@Bean
|
|
public WallFilter wallFilter() {
|
|
WallFilter wallFilter = new WallFilter();
|
|
wallFilter.setLogViolation(true);
|
|
wallFilter.setThrowException(false);
|
|
wallFilter.setConfig(this.wallConfig());
|
|
return wallFilter;
|
|
}
|
|
|
|
@Bean
|
|
public Slf4jLogFilter slf4jLogFilter() {
|
|
Slf4jLogFilter slf4jLogFilter = new Slf4jLogFilter();
|
|
return slf4jLogFilter;
|
|
}
|
|
|
|
public Properties connectionProper(){
|
|
Properties connection=new Properties();
|
|
connection.setProperty("config.decrypt","true");
|
|
connection.setProperty("config.decrypt.key",this.propertyResolver.getProperty("publicKey"));
|
|
return connection;
|
|
}
|
|
|
|
@Bean
|
|
public ServletRegistrationBean druidServlet() {
|
|
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
|
|
servletRegistrationBean.setServlet(new StatViewServlet());
|
|
servletRegistrationBean.addUrlMappings(new String[]{"/druid/*"});
|
|
Map<String, String> initParameters = new HashMap();
|
|
initParameters.put("resetEnable", "true");
|
|
initParameters.put("loginUsername", "druid");
|
|
initParameters.put("loginPassword", "druid");
|
|
servletRegistrationBean.setInitParameters(initParameters);
|
|
return servletRegistrationBean;
|
|
}
|
|
|
|
@Bean
|
|
public FilterRegistrationBean filterRegistrationBean() {
|
|
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
|
|
filterRegistrationBean.setFilter(new WebStatFilter());
|
|
filterRegistrationBean.addUrlPatterns(new String[]{"/*"});
|
|
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
|
|
return filterRegistrationBean;
|
|
}
|
|
|
|
@Bean({"druid-stat-interceptor"})
|
|
public DruidStatInterceptor DruidStatInterceptor() {
|
|
DruidStatInterceptor druidStatInterceptor = new DruidStatInterceptor();
|
|
return druidStatInterceptor;
|
|
}
|
|
|
|
@Bean
|
|
public BeanNameAutoProxyCreator beanNameAutoProxyCreator() {
|
|
BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();
|
|
beanNameAutoProxyCreator.setProxyTargetClass(true);
|
|
beanNameAutoProxyCreator.setInterceptorNames(new String[]{"druid-stat-interceptor"});
|
|
return beanNameAutoProxyCreator;
|
|
}
|
|
|
|
@Bean
|
|
public WallConfig wallConfig() {
|
|
WallConfig wallConfig = new WallConfig();
|
|
wallConfig.setMultiStatementAllow(true);
|
|
return wallConfig;
|
|
}
|
|
} |