From b6dc567c177ce6f01f6b420c622fda1cd170b75e Mon Sep 17 00:00:00 2001
From: liyongde <1419499670@qq.com>
Date: Thu, 24 Aug 2023 13:31:26 +0800
Subject: [PATCH] =?UTF-8?q?add:=20mybatis-plus=E6=97=A5=E5=BF=97=E8=BE=93?=
=?UTF-8?q?=E5=87=BAp6spy=E3=80=81=E5=A4=9A=E6=95=B0=E6=8D=AE=E6=BA=90?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../doc/mybatis多数据源配置.md | 107 ++++++++++++++++++
nladmin-system/nlsso-server/pom.xml | 13 +++
.../src/main/java/org/nl/AppRun.java | 6 +-
.../java/org/nl/config/DataBaseConfig.java | 42 +++----
.../java/org/nl/config/DruidConfigurer.java | 71 ++++++++++++
.../java/org/nl/config/MyP6SpyLogger.java | 18 +++
.../java/org/nl/config/MyStdoutLogger.java | 13 +++
.../org/nl/config/P6SpyLoggerLogback.java | 18 +++
.../task/tasks/mapper/TestMapper.java | 4 +
.../task/tasks/mapper/TestMapper.xml | 4 +
.../main/resources/config/application-dev.yml | 71 +++---------
.../src/main/resources/config/application.yml | 43 +++++--
.../src/main/resources/spy.properties | 24 ++++
.../src/test/java/org/nl/ApplicationTest.java | 25 ++++
.../src/test/java/org/nl/task/MapperTest.java | 11 ++
nladmin-ui/vue.config.js | 2 +
16 files changed, 386 insertions(+), 86 deletions(-)
create mode 100644 nladmin-system/doc/mybatis多数据源配置.md
create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/config/DruidConfigurer.java
create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/config/MyP6SpyLogger.java
create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/config/MyStdoutLogger.java
create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/config/P6SpyLoggerLogback.java
create mode 100644 nladmin-system/nlsso-server/src/main/resources/spy.properties
diff --git a/nladmin-system/doc/mybatis多数据源配置.md b/nladmin-system/doc/mybatis多数据源配置.md
new file mode 100644
index 0000000..4528466
--- /dev/null
+++ b/nladmin-system/doc/mybatis多数据源配置.md
@@ -0,0 +1,107 @@
+# mybatis多数据源配置
+
+## dynamic-datasource
+
+### 1、引入依赖
+
+4.1.3版本是稳定版
+
+```xml
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ 4.1.3
+
+```
+
+### 2、配置数据源
+
+需要注意的是,这里使用了druid,p6spy
+
+需要配置对应的数据源,使用primary来指明默认的数据源
+
+```yml
+#配置数据源
+spring:
+ autoconfigure:
+ exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ datasource:
+ dynamic:
+ primary: db1
+ datasource:
+ db1:
+ driver-class-name: com.p6spy.engine.spy.P6SpyDriver
+ url: jdbc:p6spy:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
+ username: ${DB_USER:root}
+ password: ${DB_PWD:12356}
+ type: com.alibaba.druid.pool.DruidDataSource
+ db2:
+ driver-class-name: com.p6spy.engine.spy.P6SpyDriver
+ url: jdbc:p6spy:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:13306}/${DB_NAME:test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
+ username: ${DB_USER:root}
+ password: ${DB_PWD:12356}
+ type: com.alibaba.druid.pool.DruidDataSource
+```
+
+集成了druid需要去除druid配置
+
+```yml
+ autoconfigure:
+ exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+```
+
+去除框架原来对druid数据源的配置类
+
+```java
+//import com.alibaba.druid.pool.DruidDataSource;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.boot.context.properties.ConfigurationProperties;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.context.annotation.Primary;
+//
+//import javax.sql.DataSource;
+//
+//@Configuration
+//@Slf4j
+//public class DataBaseConfig {
+//
+// @Primary
+// @Bean(name = "dataSource")
+// @ConfigurationProperties(prefix = "spring.datasource.druid")
+// public DataSource dataSource() {
+// return new DruidDataSource();
+// }
+//
+//}
+```
+
+排除掉DruidDataSourceAutoConfigure
+
+在启动类中需要排除掉DruidDataSourceAutoConfigure.class,就是取消Druid的数据源的自动配置类。
+
+```java
+@SpringBootApplication(exclude = {
+ DataSourceAutoConfiguration.class,
+ DruidDataSourceAutoConfigure.class
+})
+```
+
+也可以在配置类中
+
+```yml
+autoconfigure:
+ exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+```
+
+### 3、测试
+
+使用@DS("db2")注解实现切换数据源
+
+```java
+public interface TestMapper extends BaseMapper {
+ @DS("db2")
+ JSONObject getAll13();
+}
+```
diff --git a/nladmin-system/nlsso-server/pom.xml b/nladmin-system/nlsso-server/pom.xml
index a2a3e95..14b014c 100644
--- a/nladmin-system/nlsso-server/pom.xml
+++ b/nladmin-system/nlsso-server/pom.xml
@@ -32,6 +32,19 @@
1.9
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ 4.1.3
+
+
+
+ p6spy
+ p6spy
+ 3.9.1
+
+
org.springframework.retry
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java
index 8771470..6de7559 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java
@@ -1,6 +1,7 @@
package org.nl;
import cn.dev33.satoken.annotation.SaIgnore;
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import io.github.forezp.distributedlimitcore.annotation.Limit;
@@ -10,6 +11,7 @@ import org.nl.common.annotation.RepeatSubmit;
import org.nl.config.SpringContextHolder;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
@@ -35,7 +37,9 @@ import java.time.LocalTime;
@RestController
@Api(hidden = true)
@SpringBootApplication(exclude = {
- org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
+ org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
+ DataSourceAutoConfiguration.class,
+ DruidDataSourceAutoConfigure.class
})
@ServletComponentScan //https://blog.csdn.net/qq_36850813/article/details/101194250
@EnableTransactionManagement
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/DataBaseConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DataBaseConfig.java
index f679d3b..629a404 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/DataBaseConfig.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DataBaseConfig.java
@@ -1,23 +1,23 @@
package org.nl.config;
-import com.alibaba.druid.pool.DruidDataSource;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-
-import javax.sql.DataSource;
-
-@Configuration
-@Slf4j
-public class DataBaseConfig {
-
- @Primary
- @Bean(name = "dataSource")
- @ConfigurationProperties(prefix = "spring.datasource.druid")
- public DataSource dataSource() {
- return new DruidDataSource();
- }
-
-}
+//import com.alibaba.druid.pool.DruidDataSource;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.boot.context.properties.ConfigurationProperties;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.context.annotation.Primary;
+//
+//import javax.sql.DataSource;
+//
+//@Configuration
+//@Slf4j
+//public class DataBaseConfig {
+//
+// @Primary
+// @Bean(name = "dataSource")
+// @ConfigurationProperties(prefix = "spring.datasource.druid")
+// public DataSource dataSource() {
+// return new DruidDataSource();
+// }
+//
+//}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/DruidConfigurer.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DruidConfigurer.java
new file mode 100644
index 0000000..f18d6c7
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DruidConfigurer.java
@@ -0,0 +1,71 @@
+package org.nl.config;
+
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
+import com.alibaba.druid.util.Utils;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.*;
+import java.io.IOException;
+
+/**
+ * 去除druid底部的广告配置类 https://developer.aliyun.com/article/1073552
+ */
+@Configuration
+@ConditionalOnWebApplication
+@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
+@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
+public class DruidConfigurer {
+
+ /**
+ * 除去druid页面底部的广告
+ *
+ * @param properties
+ * @return
+ */
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ @Bean
+ public FilterRegistrationBean removeDruidAdFilterRegistrationBean(DruidStatProperties properties) {
+ // 获取web监控页面的参数
+ DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
+ // 提取common.js的配置路径
+ String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
+ String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
+
+ final String filePath = "support/http/resources/js/common.js";
+
+ // 创建filter进行过滤
+ Filter filter = new Filter() {
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+ }
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException {
+ chain.doFilter(request, response);
+ // 重置缓冲区,响应头不会被重置
+ response.resetBuffer();
+ // 获取common.js
+ String text = Utils.readFromResource(filePath);
+ // 正则替换banner, 除去底部的广告信息
+ text = text.replaceAll("
", "");
+ text = text.replaceAll("powered.*?shrek.wang", "");
+ response.getWriter().write(text);
+ }
+
+ @Override
+ public void destroy() {
+ }
+ };
+ FilterRegistrationBean registrationBean = new FilterRegistrationBean();
+ registrationBean.setFilter(filter);
+ registrationBean.addUrlPatterns(commonJsPattern);
+ return registrationBean;
+ }
+}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/MyP6SpyLogger.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/MyP6SpyLogger.java
new file mode 100644
index 0000000..73d7b2e
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/MyP6SpyLogger.java
@@ -0,0 +1,18 @@
+package org.nl.config;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
+
+/**
+ * @Author: lyd
+ * @Description: 自定义 P6spy SQL 打印策略
+ * @Date: 2023/8/23
+ */
+public class MyP6SpyLogger implements MessageFormattingStrategy {
+ @Override
+ public String formatMessage(int connectionId, String now, long elapsed, String category,
+ String prepared, String sql, String url) {
+ return StringUtils.isNotBlank(sql) ? "\u001B[31m" + now + "\u001B[0m \u001B[32m执行时间:" + elapsed + " ms\u001B[0m" +
+ " \u001B[34m执行的SQL语句:\u001B[0m\u001B[36m" + sql.replaceAll("[\\s]+", " ") : "SQL为空";
+ }
+}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/MyStdoutLogger.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/MyStdoutLogger.java
new file mode 100644
index 0000000..bec3159
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/MyStdoutLogger.java
@@ -0,0 +1,13 @@
+package org.nl.config;
+
+/**
+ * @Author: lyd
+ * @Description: 输出到控制台
+ * @Date: 2023/8/23
+ */
+public class MyStdoutLogger extends com.p6spy.engine.spy.appender.StdoutLogger {
+ @Override
+ public void logText(String text) {
+ System.out.println(text);
+ }
+}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/P6SpyLoggerLogback.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/P6SpyLoggerLogback.java
new file mode 100644
index 0000000..5a41303
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/P6SpyLoggerLogback.java
@@ -0,0 +1,18 @@
+package org.nl.config;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
+
+/**
+ * @Author: lyd
+ * @Description:
+ * @Date: 2023/8/23
+ */
+public class P6SpyLoggerLogback implements MessageFormattingStrategy {
+ @Override
+ public String formatMessage(int connectionId, String now, long elapsed, String category,
+ String prepared, String sql, String url) {
+ return StringUtils.isNotBlank(sql) ? "\u001B[32m执行时长:\u001B[0m" + elapsed + " ms" +
+ " \u001B[33mSQL语句:\u001B[0m\u001B[36m" + sql.replaceAll("[\\s]+", " ") : "SQL为空";
+ }
+}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java
index 3897ab0..4144cfe 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java
@@ -2,6 +2,7 @@ package org.nl.wms.sch.task_manage.task.tasks.mapper;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.HashMap;
@@ -37,4 +38,7 @@ public interface TestMapper extends BaseMapper {
JSONArray getAll11(JSONObject map);
JSONArray getAll12(List list);
+
+ @DS("db2")
+ JSONObject getAll13();
}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml
index dc5b28d..ee2dff6 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml
@@ -80,6 +80,10 @@
+
diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
index b0bb5b6..98aa93f 100644
--- a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
+++ b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
@@ -3,60 +3,25 @@ server:
limit.type: redis
#配置数据源
spring:
+ autoconfigure:
+ exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
- druid:
- db-type: com.alibaba.druid.pool.DruidDataSource
- driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
-# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:nl-sso-server}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
-# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
-# username: ${DB_USER:root}
-# password: ${DB_PWD:P@ssw0rd}
-# password: ${DB_PWD:P@ssw0rd}
- url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
- username: ${DB_USER:root}
-# password: ${DB_PWD:Root.123456}
- password: ${DB_PWD:12356}
- # 初始连接数
- initial-size: 5
- # 最小连接数
- min-idle: 15
- # 最大连接数
- max-active: 30
- # 超时时间(以秒数为单位)
- remove-abandoned-timeout: 180
- # 获取连接超时时间
- max-wait: 3000
- # 连接有效性检测时间
- time-between-eviction-runs-millis: 60000
- # 连接在池中最小生存的时间
- min-evictable-idle-time-millis: 300000
- # 连接在池中最大生存的时间
- max-evictable-idle-time-millis: 900000
- # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除
- test-while-idle: true
- # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个
- test-on-borrow: true
- # 是否在归还到池中前进行检验
- test-on-return: false
- # 检测连接是否有效
- validation-query: select 1
- # 配置监控统计
- webStatFilter:
- enabled: true
- stat-view-servlet:
- enabled: true
- url-pattern: /druid/*
- reset-enable: false
- filter:
- stat:
- enabled: true
- # 记录慢SQL
- log-slow-sql: true
- slow-sql-millis: 1000
- merge-sql: true
- wall:
- config:
- multi-statement-allow: true
+ dynamic:
+ primary: db1
+ datasource:
+ db1:
+ driver-class-name: com.p6spy.engine.spy.P6SpyDriver
+ url: jdbc:p6spy:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
+ username: ${DB_USER:root}
+ password: ${DB_PWD:12356}
+ type: com.alibaba.druid.pool.DruidDataSource
+ db2:
+ driver-class-name: com.p6spy.engine.spy.P6SpyDriver
+ url: jdbc:p6spy:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:13306}/${DB_NAME:test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
+ username: ${DB_USER:root}
+ password: ${DB_PWD:12356}
+ type: com.alibaba.druid.pool.DruidDataSource
+
flyway:
# 是否启用flyway
enabled: true
diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/nladmin-system/nlsso-server/src/main/resources/config/application.yml
index ac11b14..ae15768 100644
--- a/nladmin-system/nlsso-server/src/main/resources/config/application.yml
+++ b/nladmin-system/nlsso-server/src/main/resources/config/application.yml
@@ -1,4 +1,35 @@
spring:
+ datasource:
+ druid:
+ initial-size: 5 #初始化时建立物理连接的个数
+ min-idle: 15 #最小连接池数量
+ maxActive: 30 #最大连接池数量
+ maxWait: 3000 #获取连接时最大等待时间,单位毫秒
+ #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+ test-while-idle: true
+ time-between-eviction-runs-millis: 300000 #既作为检测的间隔时间又作为test-while-idle执行的依据
+ min-evictable-idle-time-millis: 900000 #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
+ #用来检测连接是否有效的sql
+ #mysql中为 select 'x'
+ #oracle中为 select 1 from dual
+ validation-query: SELECT 'x'
+ test-on-borrow: false #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
+ test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
+ exception-sorter: true #当数据库抛出不可恢复的异常时,抛弃该连接
+ pool-prepared-statements: true #是否缓存preparedStatement,mysql5.5+建议开启
+ max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true
+ #通过connectProperties属性来打开mergeSql功能;慢SQL记录
+ connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+ use-global-data-source-stat: true #合并多个DruidDataSource的监控数据
+ #filters通过别名的方式配置扩展插件,常用的插件有:
+ #监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
+ filters: stat,wall,log4j
+ #设置访问druid监控页面的拦截路径及账号和密码,默认没有
+ stat-view-servlet:
+ enabled: true
+ url-pattern: /druid/*
+ login-username: admin
+ login-password: admin
freemarker:
check-template-location: false
profiles:
@@ -9,16 +40,6 @@ spring:
redis:
repositories:
enabled: false
-
- #配置 Jpa
- jpa:
- hibernate:
- ddl-auto: none
- open-in-view: true
- properties:
- hibernate:
- dialect: org.hibernate.dialect.MySQL5InnoDBDialect
- enable_lazy_load_no_trans: true
task:
pool:
# 核心线程池大小
@@ -82,7 +103,7 @@ security:
mybatis-plus:
configuration:
map-underscore-to-camel-case: false
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations:
- classpath:org.nl.**.mapper/*.xml
global-config:
diff --git a/nladmin-system/nlsso-server/src/main/resources/spy.properties b/nladmin-system/nlsso-server/src/main/resources/spy.properties
new file mode 100644
index 0000000..75321f3
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/resources/spy.properties
@@ -0,0 +1,24 @@
+#3.2.1????
+modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
+# ???????
+#logMessageFormat=org.nl.config.MyP6SpyLogger
+logMessageFormat=org.nl.config.P6SpyLoggerLogback
+#????????
+#appender=org.nl.config.MyStdoutLogger
+#appender=com.p6spy.engine.spy.appender.StdoutLogger
+# ???????? sql
+appender=com.p6spy.engine.spy.appender.Slf4JLogger
+# ?? p6spy driver ??
+deregisterdrivers=true
+# ??JDBC URL??
+useprefix=true
+# ???? Log ??,????????error,info,batch,debug,statement,commit,rollback,result,resultset.
+excludecategories=info,debug,result,commit,resultset
+# ????
+dateformat=yyyy-MM-dd HH:mm:ss
+# ???????
+driverlist=com.mysql.cj.jdbc.Driver
+# ?????SQL??
+outagedetection=true
+# ?SQL???? 2 ?
+outagedetectioninterval=2
diff --git a/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java b/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java
index 6306320..3b1f8c8 100644
--- a/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java
+++ b/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java
@@ -1,9 +1,14 @@
package org.nl;
+import cn.hutool.core.date.DateUtil;
import org.junit.jupiter.api.Test;
import org.nl.system.service.user.ISysUserService;
+import org.nl.wms.sch.point.service.ISchBasePointService;
+import org.nl.wms.sch.region.service.ISchBaseRegionService;
+import org.nl.wms.sch.region.service.dao.SchBaseRegion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.transaction.annotation.Transactional;
/**
* @Author: lyd
@@ -14,8 +19,28 @@ import org.springframework.boot.test.context.SpringBootTest;
public class ApplicationTest {
@Autowired
private ISysUserService userService;
+ @Autowired
+ private ISchBaseRegionService regionService;
+ @Autowired
+ private ISchBasePointService pointService;
@Test
void contextLoads() {
System.out.println(userService.list());
}
+
+ /**
+ * 测试多数据源情况的事务
+ */
+ @Test
+ @Transactional
+ void contextLoads1() {
+ SchBaseRegion region = new SchBaseRegion();
+ region.setRegion_code("ee");
+ region.setRegion_name("sss");
+ region.setCreate_id("1");
+ region.setCreate_name("sss");
+ region.setCreate_time(DateUtil.now());
+ regionService.save(region);
+ int n = 1 / 0;
+ }
}
diff --git a/nladmin-system/nlsso-server/src/test/java/org/nl/task/MapperTest.java b/nladmin-system/nlsso-server/src/test/java/org/nl/task/MapperTest.java
index 4830ae4..99f24a2 100644
--- a/nladmin-system/nlsso-server/src/test/java/org/nl/task/MapperTest.java
+++ b/nladmin-system/nlsso-server/src/test/java/org/nl/task/MapperTest.java
@@ -8,6 +8,7 @@ import org.nl.config.MapOf;
import org.nl.wms.sch.task_manage.task.tasks.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
@@ -165,4 +166,14 @@ public class MapperTest {
System.out.println(SecureUtil.md5("123456"));
}
}
+
+ /**
+ * 使用第二数据源
+ */
+ @Test
+ @Transactional
+ void testMapper13() {
+ JSONObject all13 = testMapper.getAll13();
+ System.out.println("结果集:" + all13);
+ }
}
diff --git a/nladmin-ui/vue.config.js b/nladmin-ui/vue.config.js
index 0bac451..488d833 100644
--- a/nladmin-ui/vue.config.js
+++ b/nladmin-ui/vue.config.js
@@ -19,6 +19,8 @@ module.exports = {
lintOnSave: process.env.NODE_ENV === 'development',
productionSourceMap: false,
devServer: {
+ allowedHosts: ['all'],
+ disableHostCheck: true,
port: port,
open: false,
overlay: {