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: {