From 939b5e669c9bab83b7c9aaee3b285d8e09670910 Mon Sep 17 00:00:00 2001 From: songhuangfeng123 <shf18767906695@163.com> Date: 星期二, 19 七月 2022 17:54:02 +0800 Subject: [PATCH] 事故快报 --- safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/config/database/DruidConfig.java | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 165 insertions(+), 0 deletions(-) diff --git a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/config/database/DruidConfig.java b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/config/database/DruidConfig.java new file mode 100644 index 0000000..d7922fd --- /dev/null +++ b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/config/database/DruidConfig.java @@ -0,0 +1,165 @@ +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 dsAccount(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 dsDoublePrevent(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 dsSafeCheck(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; + } + + + /** + * 注入事物管理器 + * @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; + } + +} \ No newline at end of file -- Gitblit v1.9.2