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