From ab75dd3b39ffe35b6240c406edf8b503fe78a755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=AE=B6=E5=85=B4?= <2648609927@qq.com> Date: Fri, 2 May 2025 01:52:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(sa-base):=20=E4=BC=98=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E9=85=8D=E7=BD=AE=E5=B9=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BC=80=E5=90=AF=20Druid=20=E7=9B=91=E6=8E=A7=20-=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20DruidProperties=20=E7=B1=BB=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=BF=87=E6=BB=A4=E5=99=A8=E5=92=8C=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20-=20=E6=9B=B4=E6=96=B0=20sa-base.yaml=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=BB=E4=BB=8E=E6=95=B0=E6=8D=AE=E6=BA=90=E5=92=8C=20Druid?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E8=AE=BE=E7=BD=AE=20-=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=20DynamicDataSourceContextHandler=20=E7=B1=BB=E7=9A=84?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DynamicDataSourceContextHandler.java | 4 +- .../sa/base/properties/DruidProperties.java | 28 +++++++++++ .../src/main/resources/dev/sa-base.yaml | 23 ++++++--- .../src/main/resources/pre/sa-base.yaml | 45 +++++++++++++----- .../src/main/resources/prod/sa-base.yaml | 47 +++++++++++++------ .../src/main/resources/test/sa-base.yaml | 45 +++++++++++++----- 6 files changed, 143 insertions(+), 49 deletions(-) diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/handler/DynamicDataSourceContextHandler.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/handler/DynamicDataSourceContextHandler.java index a52140e5..d59af791 100644 --- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/handler/DynamicDataSourceContextHandler.java +++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/handler/DynamicDataSourceContextHandler.java @@ -15,8 +15,8 @@ import lombok.extern.slf4j.Slf4j; public class DynamicDataSourceContextHandler { /** - * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本, - * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 + * 使用ThreadLocal维护变量 ThreadLocal为每个使用该变量的线程提供独立的变量副本 + * 所以每一个线程都可以独立地改变自己的副本 而不会影响其它线程所对应的副本 */ private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/properties/DruidProperties.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/properties/DruidProperties.java index a625ce47..87efb114 100644 --- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/properties/DruidProperties.java +++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/properties/DruidProperties.java @@ -1,9 +1,15 @@ package net.lab1024.sa.base.properties; +import com.alibaba.druid.filter.Filter; +import com.alibaba.druid.filter.stat.StatFilter; import com.alibaba.druid.pool.DruidDataSource; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; +import java.sql.SQLException; +import java.util.ArrayList; + /** * Druid 配置属性 * @@ -13,6 +19,7 @@ import org.springframework.context.annotation.Configuration; * @Email lab1024@163.com * @Copyright 1024创新实验室 */ +@Slf4j @Configuration public class DruidProperties { @@ -43,6 +50,9 @@ public class DruidProperties { @Value("${spring.datasource.druid.max-evictable-idle-time-millis}") private int maxEvictableIdleTimeMillis; + @Value("${spring.datasource.druid.filters}") + private String filters; + /** * 构建datasource */ @@ -68,6 +78,24 @@ public class DruidProperties { // 配置一个连接在池中最小、最大生存的时间,单位是毫秒 datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + + datasource.setValidationQuery("SELECT 1"); + + try { + // 配置过滤器 + datasource.setFilters(filters); + + // 配置监控 + ArrayList arrayList = new ArrayList<>(); + StatFilter statFilter = new StatFilter(); + statFilter.setMergeSql(true); + statFilter.setSlowSqlMillis(1000); + statFilter.setLogSlowSql(true); + arrayList.add(statFilter); + datasource.setProxyFilters(arrayList); + } catch (SQLException e) { + log.error("初始化数据源出错", e); + } return datasource; } } diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/dev/sa-base.yaml b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/dev/sa-base.yaml index 840bc752..86b4c667 100644 --- a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/dev/sa-base.yaml +++ b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/dev/sa-base.yaml @@ -4,15 +4,18 @@ spring: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.p6spy.engine.spy.P6SpyDriver druid: + # 主数据源 master: url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai username: root - password: SmartAdmin666 + password: root + # 从数据源 slave: - enabled: true + enabled: false url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3_slave?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai username: root - password: SmartAdmin666 + password: root + # 连接池配置 initial-size: 2 min-idle: 2 max-active: 10 @@ -23,10 +26,16 @@ spring: min-evictable-idle-time-millis: 300000 max-evictable-idle-time-millis: 300000 filters: stat - username: druid - password: 1024 - login: - enabled: false + # Druid监控 + stat-view-servlet: + enabled: true + url-pattern: /druid/* + login-username: druid + login-password: 1024 + web-stat-filter: + enabled: true + url-pattern: /* + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" method: pointcut: net.lab1024.sa..*Service.* diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/pre/sa-base.yaml b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/pre/sa-base.yaml index eac78946..68d2eeb8 100644 --- a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/pre/sa-base.yaml +++ b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/pre/sa-base.yaml @@ -1,22 +1,41 @@ spring: # 数据库连接信息 datasource: - url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai - username: root - password: SmartAdmin666 + type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.p6spy.engine.spy.P6SpyDriver - initial-size: 2 - min-idle: 2 - max-active: 10 - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - filters: stat druid: - username: druid - password: 1024 - login: + # 主数据源 + master: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: root + # 从数据源 + slave: enabled: false + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3_slave?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: root + # 连接池配置 + initial-size: 2 + min-idle: 2 + max-active: 10 + max-wait: 60000 + connect-timeout: 30000 + socket-timeout: 30000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + max-evictable-idle-time-millis: 300000 + filters: stat + # Druid监控 + stat-view-servlet: + enabled: true + url-pattern: /druid/* + login-username: druid + login-password: 1024 + web-stat-filter: + enabled: true + url-pattern: /* + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" method: pointcut: net.lab1024.sa..*Service.* diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/prod/sa-base.yaml b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/prod/sa-base.yaml index ab70b8f9..024daa26 100644 --- a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/prod/sa-base.yaml +++ b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/prod/sa-base.yaml @@ -1,22 +1,41 @@ spring: # 数据库连接信息 datasource: - url: jdbc:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai - username: root - password: SmartAdmin666 - driver-class-name: com.mysql.cj.jdbc.Driver - initial-size: 10 - min-idle: 10 - max-active: 100 - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - filters: stat + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.p6spy.engine.spy.P6SpyDriver druid: - username: druid - password: 1024lab - login: + # 主数据源 + master: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: root + # 从数据源 + slave: enabled: false + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3_slave?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: root + # 连接池配置 + initial-size: 2 + min-idle: 2 + max-active: 10 + max-wait: 60000 + connect-timeout: 30000 + socket-timeout: 30000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + max-evictable-idle-time-millis: 300000 + filters: stat + # Druid监控 + stat-view-servlet: + enabled: true + url-pattern: /druid/* + login-username: druid + login-password: 1024 + web-stat-filter: + enabled: true + url-pattern: /* + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" method: pointcut: net.lab1024.sa..*Service.* diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/test/sa-base.yaml b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/test/sa-base.yaml index eac78946..68d2eeb8 100644 --- a/smart-admin-api-java17-springboot3/sa-base/src/main/resources/test/sa-base.yaml +++ b/smart-admin-api-java17-springboot3/sa-base/src/main/resources/test/sa-base.yaml @@ -1,22 +1,41 @@ spring: # 数据库连接信息 datasource: - url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai - username: root - password: SmartAdmin666 + type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.p6spy.engine.spy.P6SpyDriver - initial-size: 2 - min-idle: 2 - max-active: 10 - max-wait: 60000 - time-between-eviction-runs-millis: 60000 - min-evictable-idle-time-millis: 300000 - filters: stat druid: - username: druid - password: 1024 - login: + # 主数据源 + master: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: root + # 从数据源 + slave: enabled: false + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v3_slave?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: root + # 连接池配置 + initial-size: 2 + min-idle: 2 + max-active: 10 + max-wait: 60000 + connect-timeout: 30000 + socket-timeout: 30000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + max-evictable-idle-time-millis: 300000 + filters: stat + # Druid监控 + stat-view-servlet: + enabled: true + url-pattern: /druid/* + login-username: druid + login-password: 1024 + web-stat-filter: + enabled: true + url-pattern: /* + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" method: pointcut: net.lab1024.sa..*Service.*