package com.gkhy.safePlatform.config.database;
|
|
import com.alibaba.druid.filter.stat.StatFilter;
|
import com.alibaba.druid.support.http.StatViewServlet;
|
import com.alibaba.druid.support.http.WebStatFilter;
|
import com.alibaba.druid.wall.WallConfig;
|
import com.alibaba.druid.wall.WallFilter;
|
import com.atomikos.icatch.jta.UserTransactionImp;
|
import com.atomikos.icatch.jta.UserTransactionManager;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean;
|
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 org.springframework.stereotype.Component;
|
import org.springframework.transaction.jta.JtaTransactionManager;
|
|
import javax.sql.DataSource;
|
import javax.transaction.UserTransaction;
|
import java.util.Properties;
|
|
/**
|
* Druid配置
|
*
|
*
|
*/
|
@Component
|
@Configuration
|
public class DruidConfig {
|
|
@Value("${spring.datasource.type}")
|
private String datasourceClass;
|
|
@Bean(name = "dsGoalManage")
|
@Primary
|
@Autowired
|
public DataSource dsGoalManage(Environment env) {
|
AtomikosDataSourceBean ds = new AtomikosDataSourceBean();
|
Properties prop = build(env, "spring.datasource.goalmanage.");
|
// ds.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource");
|
ds.setXaDataSourceClassName(datasourceClass);
|
ds.setUniqueResourceName("goalmanage");
|
ds.setPoolSize(2);
|
ds.setXaProperties(prop);
|
return ds;
|
|
}
|
|
|
@Autowired
|
@Primary
|
@Bean(name = "dsEmergency")
|
public AtomikosDataSourceBean dsEmergency(Environment env) {
|
AtomikosDataSourceBean ds = new AtomikosDataSourceBean();
|
Properties prop = build(env, "spring.datasource.emergency.");
|
// ds.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource");
|
ds.setXaDataSourceClassName(datasourceClass);
|
ds.setUniqueResourceName("emergency");
|
ds.setPoolSize(2);
|
ds.setXaProperties(prop);
|
return ds;
|
}
|
|
@Autowired
|
@Primary
|
@Bean(name = "dsIncidentManage")
|
public AtomikosDataSourceBean dsIncidentManage(Environment env) {
|
AtomikosDataSourceBean ds = new AtomikosDataSourceBean();
|
Properties prop = build(env, "spring.datasource.incidentmanage.");
|
ds.setXaDataSourceClassName(datasourceClass);
|
// ds.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource");
|
ds.setUniqueResourceName("incidentmanage");
|
ds.setPoolSize(2);
|
ds.setXaProperties(prop);
|
return ds;
|
}
|
|
@Autowired
|
@Primary
|
@Bean(name = "dsEquipment")
|
public AtomikosDataSourceBean dsEquipment(Environment env) {
|
AtomikosDataSourceBean ds = new AtomikosDataSourceBean();
|
Properties prop = build(env, "spring.datasource.equipment.");
|
ds.setXaDataSourceClassName(datasourceClass);
|
// ds.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource");
|
ds.setUniqueResourceName("equipment");
|
ds.setPoolSize(2);
|
ds.setXaProperties(prop);
|
return ds;
|
}
|
|
|
/**
|
* 注入事物管理器
|
* @return
|
*/
|
@Bean(name = "xatx")
|
public JtaTransactionManager regTransactionManager () {
|
UserTransactionManager userTransactionManager = new UserTransactionManager();
|
UserTransaction userTransaction = new UserTransactionImp();
|
return new JtaTransactionManager(userTransaction, userTransactionManager);
|
}
|
|
|
private Properties build(Environment env, String prefix) {
|
|
Properties prop = new Properties();
|
prop.put("url", env.getProperty(prefix + "url"));
|
prop.put("username", env.getProperty(prefix + "username"));
|
prop.put("password", env.getProperty(prefix + "password"));
|
prop.put("driverClassName", env.getProperty(prefix + "driver-class-name", ""));
|
// prop.put("initialSize", env.getProperty(prefix + "initialSize", Integer.class));
|
// prop.put("maxActive", env.getProperty(prefix + "maxActive", Integer.class));
|
// prop.put("minIdle", env.getProperty(prefix + "minIdle", Integer.class));
|
// prop.put("maxWait", env.getProperty(prefix + "maxWait", Integer.class));
|
// prop.put("poolPreparedStatements", env.getProperty(prefix + "poolPreparedStatements", Boolean.class));
|
//
|
// prop.put("maxPoolPreparedStatementPerConnectionSize",
|
// env.getProperty(prefix + "maxPoolPreparedStatementPerConnectionSize", Integer.class));
|
//
|
// prop.put("maxPoolPreparedStatementPerConnectionSize",
|
// env.getProperty(prefix + "maxPoolPreparedStatementPerConnectionSize", Integer.class));
|
// prop.put("validationQuery", env.getProperty(prefix + "validationQuery"));
|
// prop.put("validationQueryTimeout", env.getProperty(prefix + "validationQueryTimeout", Integer.class));
|
// prop.put("testOnBorrow", env.getProperty(prefix + "testOnBorrow", Boolean.class));
|
// prop.put("testOnReturn", env.getProperty(prefix + "testOnReturn", Boolean.class));
|
// prop.put("testWhileIdle", env.getProperty(prefix + "testWhileIdle", Boolean.class));
|
// prop.put("timeBetweenEvictionRunsMillis",
|
// env.getProperty(prefix + "timeBetweenEvictionRunsMillis", Integer.class));
|
// prop.put("minEvictableIdleTimeMillis", env.getProperty(prefix + "minEvictableIdleTimeMillis", Integer.class));
|
// prop.put("filters", env.getProperty(prefix + "filters"));
|
|
return prop;
|
}
|
|
// @Bean
|
public ServletRegistrationBean druidServlet() {
|
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
|
|
//控制台管理用户,加入下面2行 进入druid后台就需要登录
|
//servletRegistrationBean.addInitParameter("loginUsername", "admin");
|
//servletRegistrationBean.addInitParameter("loginPassword", "admin");
|
return servletRegistrationBean;
|
}
|
|
// @Bean
|
public FilterRegistrationBean filterRegistrationBean() {
|
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
|
filterRegistrationBean.setFilter(new WebStatFilter());
|
filterRegistrationBean.addUrlPatterns("/*");
|
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
|
filterRegistrationBean.addInitParameter("profileEnable", "true");
|
return filterRegistrationBean;
|
}
|
|
// @Bean
|
public StatFilter statFilter(){
|
StatFilter statFilter = new StatFilter();
|
statFilter.setLogSlowSql(true); //slowSqlMillis用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢。
|
statFilter.setMergeSql(true); //SQL合并配置
|
statFilter.setSlowSqlMillis(1000);//slowSqlMillis的缺省值为3000,也就是3秒。
|
return statFilter;
|
}
|
|
// @Bean
|
public WallFilter wallFilter(){
|
WallFilter wallFilter = new WallFilter();
|
//允许执行多条SQL
|
WallConfig config = new WallConfig();
|
config.setMultiStatementAllow(true);
|
wallFilter.setConfig(config);
|
return wallFilter;
|
}
|
|
}
|