Explorar el Código

修改连接池

785834757 hace 2 años
padre
commit
335c1fdb42

+ 26 - 22
pom.xml

@@ -19,7 +19,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
-        <druid.version>1.1.10</druid.version>
+        <druid.version>1.2.6</druid.version>
         <fastjson.version>1.2.58</fastjson.version>
         <kaptcha.version>0.0.9</kaptcha.version>
         <mapstruct.version>1.5.4.Final</mapstruct.version>
@@ -29,17 +29,6 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
-            <exclusions>
-<!--                <exclusion>-->
-<!--                    <groupId>org.springframework.boot</groupId>-->
-<!--                    <artifactId>spring-boot-starter-logging</artifactId>-->
-<!--                </exclusion>-->
-                <!--                &lt;!&ndash; 打成war包,排除spring-boot-starter-web中的Tomcat&ndash;&gt;-->
-                <!--                <exclusion>-->
-                <!--                    <groupId>org.springframework.boot</groupId>-->
-                <!--                    <artifactId>spring-boot-starter-tomcat</artifactId>-->
-                <!--                </exclusion>-->
-            </exclusions>
         </dependency>
 
 <!--        <dependency>-->
@@ -82,11 +71,11 @@
         </dependency>
 
         <!-- 加入p6spy -->
-        <dependency>
-            <groupId>p6spy</groupId>
-            <artifactId>p6spy</artifactId>
-            <version>3.8.5</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>p6spy</groupId>-->
+<!--            <artifactId>p6spy</artifactId>-->
+<!--            <version>3.8.5</version>-->
+<!--        </dependency>-->
 
         <!-- kaptcha -->
         <dependency>
@@ -102,17 +91,32 @@
             <scope>runtime</scope>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>${druid.version}</version>
+        </dependency>
+
+        <!-- Druid 依赖 log4j包 -->
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.17</version>
+        </dependency>
+
         <!-- druid -->
         <!--        <dependency>-->
         <!--            <groupId>com.alibaba</groupId>-->
         <!--            <artifactId>druid-spring-boot-starter</artifactId>-->
         <!--            <version>${druid.version}</version>-->
         <!--        </dependency>-->
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>druid</artifactId>
-            <version>1.1.10</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba</groupId>-->
+<!--            <artifactId>druid</artifactId>-->
+<!--            <version>1.1.10</version>-->
+<!--        </dependency>-->
+<!--        -->
+
 
 
         <!--        &lt;!&ndash; swagger &ndash;&gt;-->

+ 12 - 34
src/main/java/com/ydtech/config/DruidConfig.java

@@ -1,53 +1,31 @@
 package com.ydtech.config;
 
+import com.alibaba.druid.pool.DruidDataSource;
 import com.alibaba.druid.support.http.StatViewServlet;
 import com.alibaba.druid.support.http.WebStatFilter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import javax.sql.DataSource;
+
 /**
  * Druid数据源配置
  *
  * @author Yasepix
  * @date Oct 29, 2018
  */
-@Configuration
-public class DruidConfig {
-    /**
-     * 注册一个StatViewServlet
-     */
-    @Bean
-    public ServletRegistrationBean druidStatViewServlet() {
-        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
-
-        //IP白名单
-        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
-        //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
-        servletRegistrationBean.addInitParameter("deny", "");
-
-        //登录查看信息的账号密码
-        servletRegistrationBean.addInitParameter("loginUsername", "admin");
-        servletRegistrationBean.addInitParameter("loginPassword", "123456");
-        //是否能够重置数据
-        servletRegistrationBean.addInitParameter("resetEnable", "false");
-        return servletRegistrationBean;
-    }
 
-    /**
-     * 注册一个:filterRegistrationBean
-     */
+@Configuration  //标识该类被纳入spring容器中实例化并管理
+@ServletComponentScan //用于扫描所有的Servlet、filter、listener
+public class DruidConfig {
     @Bean
-    public FilterRegistrationBean druidStatFilter() {
-
-        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
-
-        //添加过滤规则
-        filterRegistrationBean.addUrlPatterns("/*");
-
-        //添加不需要忽略的格式信息.
-        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
-        return filterRegistrationBean;
+    @ConfigurationProperties(prefix="spring.datasource.druid")
+    //加载时读取指定的配置信息,前缀为spring.datasource.druid
+    public DataSource druidDataSource() {
+        return new DruidDataSource();
     }
 }

+ 29 - 29
src/main/java/com/ydtech/utils/P6SpyLogger.java

@@ -1,34 +1,34 @@
-package com.ydtech.utils;
-
-import com.p6spy.engine.common.P6Util;
-import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
-
-import java.text.SimpleDateFormat;
-
-public class P6SpyLogger implements MessageFormattingStrategy {
+//package com.ydtech.utils;
+//
+//import com.p6spy.engine.common.P6Util;
+//import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
+//
+//import java.text.SimpleDateFormat;
+//
+//public class P6SpyLogger implements MessageFormattingStrategy {
+////    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
+////
+////    @Override
+////    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
+////        return StringUtils.isNotBlank(sql) ? DateUtil.formatFullTime(LocalDateTime.now(), DateUtil.FULL_TIME_SPLIT_PATTERN)
+////                + " | 耗时 " + elapsed + " ms | SQL 语句:" + StringUtils.LF + sql.replaceAll("[\\s]+", StringUtils.SPACE) + ";" : StringUtils.EMPTY;
+////    }
+//
 //    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
 //
 //    @Override
 //    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
-//        return StringUtils.isNotBlank(sql) ? DateUtil.formatFullTime(LocalDateTime.now(), DateUtil.FULL_TIME_SPLIT_PATTERN)
-//                + " | 耗时 " + elapsed + " ms | SQL 语句:" + StringUtils.LF + sql.replaceAll("[\\s]+", StringUtils.SPACE) + ";" : StringUtils.EMPTY;
+//        StringBuilder sb = new StringBuilder();
+//        sb
+//                .append("=====================================================\n")
+//                .append("连接id:").append(connectionId).append("\n")
+//                .append("当前时间:").append(now).append("\n")
+//                .append("类别:").append(category).append("\n")
+//                .append("花费时间:").append(elapsed).append(" ms\n")
+////                .append("url:").append(url).append("\n")
+//                .append("预编译sql:").append(P6Util.singleLine(prepared)).append("\n")
+//                .append("最终执行的sql:").append(P6Util.singleLine(sql))
+//                .append("\n=====================================================\n");
+//        return sb.toString();
 //    }
-
-    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
-
-    @Override
-    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
-        StringBuilder sb = new StringBuilder();
-        sb
-                .append("=====================================================\n")
-                .append("连接id:").append(connectionId).append("\n")
-                .append("当前时间:").append(now).append("\n")
-                .append("类别:").append(category).append("\n")
-                .append("花费时间:").append(elapsed).append(" ms\n")
-//                .append("url:").append(url).append("\n")
-                .append("预编译sql:").append(P6Util.singleLine(prepared)).append("\n")
-                .append("最终执行的sql:").append(P6Util.singleLine(sql))
-                .append("\n=====================================================\n");
-        return sb.toString();
-    }
-}
+//}

+ 31 - 18
src/main/resources/application-prod.yml

@@ -90,25 +90,38 @@ resp_json: '{"status":"Z00001","msg":"success","data":{"invoiceType":[],"payWayL
 
 spring:
   datasource:
-    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
+    driver-class-name: com.mysql.cj.jdbc.Driver
     druid:
-      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
-      filters: stat,wall,log4j
-      initial-size: 5
-      maxActive: 20
-      maxPoolPreparedStatementPerConnectionSize: 20
-      maxWait: 60000
-      minEvictableIdleTimeMillis: 300000
-      minIdle: 5
-      poolPreparedStatements: true
-      testOnBorrow: true
-      testOnReturn: true
-      testWhileIdle: true
-      timeBetweenEvictionRunsMillis: 60000
-      validationQuery: SELECT 1 FROM DUAL
-    password: Iy$@$koH@oURxyvw
-    url: jdbc:p6spy:mysql://rm-8vbaejxof1xh06o9r.mysql.zhangbei.rds.aliyuncs.com:3306/agent?serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
-    username: sxzgkj
+      password: 'Iy$@$koH@oURxyvw'
+      url: jdbc:mysql://rm-8vbaejxof1xh06o9r.mysql.zhangbei.rds.aliyuncs.com:3306/agent?serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
+      username: sxzgkj
+      # 连接池配置
+      initial-size: 5                                #连接池的初始化连接数。
+      max-active: 20                                 #连接池的最大活跃连接数。
+      min-idle: 5                                    #连接池的最小空闲连接数。
+      max-wait: 6000                                 #获取连接的最大等待时间,单位毫秒
+      # 数据库连接池验证配置
+      validation-query: SELECT 1                     # 用于验证连接的 SQL 查询语句
+      test-on-borrow: true                           # 从连接池获取连接时是否进行验证
+      test-on-return: true                           # 回连接池时,会执行一次有效性检查
+      test-while-idle: true                          # 连接在空闲时会定期执行一次有效性检查
+      # 连接池任务清理
+      time-between-eviction-runs-millis: 60000       # 连接池清理任务每隔60秒执行一次。
+      min-evictable-idle-time-millis: 300000         # 连接在空闲时间达到5分钟后才会被标记为可回收状态
+      # 预编译
+      pool-prepared-statements: true                      # 否启用预编译语句池
+      max-pool-prepared-statement-per-connection-size: 20 # 表示每个连接最多可以缓存20个预编译语句对象。
+      # 连接池监控配置
+      stat-view-servlet:
+        enabled: true                                # 启用 Druid 的监控页面
+        url-pattern: /druid/*
+        login-username: admin
+        login-password: 123456
+      filters: stat,wall
+      async-init: true #连接池的初始化将以异步方式进行
+      db-type: mysql
+
+
   redis:
     database: 0
     host: 172.24.144.220

+ 29 - 26
src/main/resources/application-test.yml

@@ -108,33 +108,36 @@ resp_json: '{"code":200,"msg":null,"data":{"busUniqueId":"P_YBX_TESTT0NukiEN02OG
 
 spring:
   datasource:
-    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
+    driver-class-name: com.mysql.cj.jdbc.Driver
     druid:
-      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
-      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
-      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
-      filters: stat,wall,log4j
-      # 初始化大小,最小,最大
-      initial-size: 5
-      maxActive: 20
-      maxPoolPreparedStatementPerConnectionSize: 20
-      # 配置获取连接等待超时的时间
-      maxWait: 60000
-      # 配置一个连接在池中最小生存的时间,单位是毫秒
-      minEvictableIdleTimeMillis: 300000
-      minIdle: 5
-      # 打开PSCache,并且指定每个连接上PSCache的大小
-      poolPreparedStatements: true
-      testOnBorrow: true
-      testOnReturn: true
-      testWhileIdle: true
-      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-      timeBetweenEvictionRunsMillis: 60000
-      validationQuery: SELECT 1 FROM DUAL
-    ## 测试库
-    url: jdbc:p6spy:mysql://47.92.254.66:3306/zgdd?serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
-    username: root
-    password: '@RqGHG#KZ*C9ytkQ'
+      url: jdbc:mysql://47.92.254.66:3306/zgdd?serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
+      username: root
+      password: '@RqGHG#KZ*C9ytkQ'
+      # 连接池配置
+      initial-size: 5                                #连接池的初始化连接数。
+      max-active: 20                                 #连接池的最大活跃连接数。
+      min-idle: 5                                    #连接池的最小空闲连接数。
+      max-wait: 6000                                 #获取连接的最大等待时间,单位毫秒
+      # 数据库连接池验证配置
+      validation-query: SELECT 1                     # 用于验证连接的 SQL 查询语句
+      test-on-borrow: true                           # 从连接池获取连接时是否进行验证
+      test-on-return: true                           # 回连接池时,会执行一次有效性检查
+      test-while-idle: true                          # 连接在空闲时会定期执行一次有效性检查
+      # 连接池任务清理
+      time-between-eviction-runs-millis: 60000       # 连接池清理任务每隔60秒执行一次。
+      min-evictable-idle-time-millis: 300000         # 连接在空闲时间达到5分钟后才会被标记为可回收状态
+      # 预编译
+      pool-prepared-statements: true                      # 否启用预编译语句池
+      max-pool-prepared-statement-per-connection-size: 20 # 表示每个连接最多可以缓存20个预编译语句对象。
+      # 连接池监控配置
+      stat-view-servlet:
+        enabled: true                                # 启用 Druid 的监控页面
+        url-pattern: /druid/*
+        login-username: admin
+        login-password: 123456
+      filters: stat,wall
+      async-init: true #连接池的初始化将以异步方式进行
+      db-type: mysql
 
   # redis 配置
   redis: