diff --git a/http-client.env.json b/http-client.env.json
index 725ec1ce1..cfdc7f030 100644
--- a/http-client.env.json
+++ b/http-client.env.json
@@ -1,13 +1,22 @@
{
"local": {
- "baseUrl": "http://127.0.0.1:18083/management-api/",
- "management-api-base-url": "http://127.0.0.1:18083/management-api/",
- "accessToken": "yudaoyuanma",
+ "baseUrl": "http://127.0.0.1:48080/admin-api",
+ "systemBaseUrl": "http://127.0.0.1:48081/admin-api",
- "user-api-base-url": "http://127.0.0.1:18082/user-api/",
- "shop-api-base-url": "http://127.0.0.1:18084/shop-api/",
- "user-access-token": "yunai",
+ "token": "test1",
+ "adminTenentId": "1",
- "dubboTag": "${HOSTNAME}"
+ "appApi": "http://127.0.0.1:48080/app-api",
+ "appToken": "test1",
+ "appTenentId": "1"
+ },
+ "gateway": {
+ "baseUrl": "http://127.0.0.1:8888/admin-api",
+ "token": "test1",
+ "adminTenentId": "1",
+
+ "appApi": "http://127.0.0.1:8888/app-api",
+ "appToken": "test1",
+ "appTenentId": "1"
}
}
diff --git a/system-service-project/system-service-integration-test/pom.xml b/system-service-project/system-service-integration-test/pom.xml
deleted file mode 100644
index 74a5f998e..000000000
--- a/system-service-project/system-service-integration-test/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- system-service-project
- cn.iocoder.mall
- 1.0-SNAPSHOT
-
- 4.0.0
-
- system-service-integration-test
-
-
-
- cn.iocoder.mall
- system-service-app
- 1.0-SNAPSHOT
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
diff --git a/system-service-project/system-service-integration-test/src/test/java/cn/iocoder/mall/systemservice/service/oauth/OAuth2ServiceImplTest.java b/system-service-project/system-service-integration-test/src/test/java/cn/iocoder/mall/systemservice/service/oauth/OAuth2ServiceImplTest.java
deleted file mode 100644
index e00c9018b..000000000
--- a/system-service-project/system-service-integration-test/src/test/java/cn/iocoder/mall/systemservice/service/oauth/OAuth2ServiceImplTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.iocoder.mall.systemservice.service.oauth;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class OAuth2ServiceImplTest {
-
- @Autowired
- private OAuth2ServiceImpl oauth2Service;
-
- @Test
- public void testCheckAccessToken() {
- oauth2Service.checkAccessToken("yunai");
- }
-
-}
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
index 578ad76f9..bbad8276d 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
@@ -83,9 +83,9 @@ public class GlobalExceptionHandler {
if (ex instanceof HttpRequestMethodNotSupportedException) {
return httpRequestMethodNotSupportedExceptionHandler((HttpRequestMethodNotSupportedException) ex);
}
- if (ex instanceof RequestNotPermitted) {
- return requestNotPermittedExceptionHandler(request, (RequestNotPermitted) ex);
- }
+// if (ex instanceof RequestNotPermitted) {
+// return requestNotPermittedExceptionHandler(request, (RequestNotPermitted) ex);
+// }
if (ex instanceof ServiceException) {
return serviceExceptionHandler((ServiceException) ex);
}
@@ -183,14 +183,15 @@ public class GlobalExceptionHandler {
return CommonResult.error(METHOD_NOT_ALLOWED.getCode(), String.format("请求方法不正确:%s", ex.getMessage()));
}
- /**
- * 处理 Resilience4j 限流抛出的异常
- */
- @ExceptionHandler(value = RequestNotPermitted.class)
- public CommonResult> requestNotPermittedExceptionHandler(HttpServletRequest req, RequestNotPermitted ex) {
- log.warn("[requestNotPermittedExceptionHandler][url({}) 访问过于频繁]", req.getRequestURL(), ex);
- return CommonResult.error(TOO_MANY_REQUESTS);
- }
+ // TODO 芋艿:暂时去掉
+// /**
+// * 处理 Resilience4j 限流抛出的异常
+// */
+// @ExceptionHandler(value = RequestNotPermitted.class)
+// public CommonResult> requestNotPermittedExceptionHandler(HttpServletRequest req, RequestNotPermitted ex) {
+// log.warn("[requestNotPermittedExceptionHandler][url({}) 访问过于频繁]", req.getRequestURL(), ex);
+// return CommonResult.error(TOO_MANY_REQUESTS);
+// }
/**
* 处理 Spring Security 权限不足的异常
diff --git a/yudao-module-system/yudao-module-system-biz/pom.xml b/yudao-module-system/yudao-module-system-biz/pom.xml
index decebdda0..5ebd72b9a 100644
--- a/yudao-module-system/yudao-module-system-biz/pom.xml
+++ b/yudao-module-system/yudao-module-system-biz/pom.xml
@@ -72,11 +72,11 @@
yudao-spring-boot-starter-redis
-
-
- cn.iocoder.cloud
- yudao-spring-boot-starter-job
-
+
+
+
+
+
@@ -84,6 +84,12 @@
yudao-spring-boot-starter-mq
+
+
+
+
+
+
cn.iocoder.cloud
@@ -97,6 +103,12 @@
yudao-spring-boot-starter-excel
+
+
+ cn.iocoder.cloud
+ yudao-spring-boot-starter-monitor
+
+
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/SystemServerApplication.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/SystemServerApplication.java
new file mode 100644
index 000000000..8536d24a2
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/SystemServerApplication.java
@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.system;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+// TODO 芋艿:修改启动文档的地址
+/**
+ * 项目的启动类
+ *
+ * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ *
+ * @author 芋道源码
+ */
+@SpringBootApplication
+public class SystemServerApplication {
+
+ public static void main(String[] args) {
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+
+ SpringApplication.run(SystemServerApplication.class, args);
+
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ }
+
+}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http
index c2715634e..f57ca59a0 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http
@@ -1,5 +1,5 @@
### 请求 /login 接口 => 成功
-POST {{baseUrl}}/system/auth/login
+POST {{systemBaseUrl}}/system/auth/login
Content-Type: application/json
tenant-id: {{adminTenentId}}
@@ -11,7 +11,7 @@ tenant-id: {{adminTenentId}}
}
### 请求 /login 接口 => 成功(无验证码)
-POST {{baseUrl}}/system/auth/login
+POST {{systemBaseUrl}}/system/auth/login
Content-Type: application/json
tenant-id: {{adminTenentId}}
@@ -21,12 +21,12 @@ tenant-id: {{adminTenentId}}
}
### 请求 /get-permission-info 接口 => 成功
-GET {{baseUrl}}/system/auth/get-permission-info
+GET {{systemBaseUrl}}/system/auth/get-permission-info
Authorization: Bearer {{token}}
tenant-id: {{adminTenentId}}
### 请求 /list-menus 接口 => 成功
-GET {{baseUrl}}/system/list-menus
+GET {{systemBaseUrl}}/system/list-menus
Authorization: Bearer {{token}}
#Authorization: Bearer a6aa7714a2e44c95aaa8a2c5adc2a67a
tenant-id: {{adminTenentId}}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/TmpConfiguration.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/TmpConfiguration.java
new file mode 100644
index 000000000..51e4ff417
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/TmpConfiguration.java
@@ -0,0 +1,44 @@
+package cn.iocoder.yudao.module.system.framework;
+
+import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService;
+import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class TmpConfiguration {
+
+ @Bean
+ public FileApi fileApi() {
+ return new FileApi() {
+ @Override
+ public String createFile(String path, byte[] content) throws Exception {
+ return null;
+ }
+ };
+ }
+
+ @Bean
+ public ApiAccessLogFrameworkService apiAccessLogFrameworkService() {
+ return new ApiAccessLogFrameworkService() {
+ @Override
+ public void createApiAccessLogAsync(ApiAccessLogCreateReqDTO createDTO) {
+
+ }
+ };
+ }
+
+ @Bean
+ public ApiErrorLogFrameworkService apiErrorLogFrameworkService() {
+ return new ApiErrorLogFrameworkService() {
+ @Override
+ public void createApiErrorLogAsync(ApiErrorLogCreateReqDTO createDTO) {
+
+ }
+ };
+ }
+
+}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml
new file mode 100644
index 000000000..52eb7275a
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml
@@ -0,0 +1,204 @@
+server:
+ port: 48081
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+ # 数据源配置项
+ autoconfigure:
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+ datasource:
+ druid: # Druid 【监控】相关的全局配置
+ web-stat-filter:
+ enabled: true
+ stat-view-servlet:
+ enabled: true
+ allow: # 设置白名单,不填则允许所有访问
+ url-pattern: /druid/*
+ login-username: # 控制台管理用户名和密码
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ log-slow-sql: true # 慢 SQL 记录
+ slow-sql-millis: 100
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
+ dynamic: # 多数据源配置
+ druid: # Druid 【连接池】相关的全局配置
+ initial-size: 5 # 初始连接数
+ min-idle: 10 # 最小连接池数量
+ max-active: 20 # 最大连接池数量
+ max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+ time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+ min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+ max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+ validation-query: SELECT 1 # 配置检测连接是否有效
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ primary: master
+ datasource:
+ master:
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password: 3WLiVUBEwTbvAfsh
+ slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password: 3WLiVUBEwTbvAfsh
+
+ # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+ redis:
+ host: 400-infra.server.iocoder.cn # 地址
+ port: 6379 # 端口
+ database: 1 # 数据库索引
+# password: 123456 # 密码,建议生产环境开启
+
+jasypt:
+ encryptor:
+ password: yuanma # 加解密的秘钥
+
+--- #################### 定时任务相关配置 ####################
+
+# Quartz 配置项,对应 QuartzProperties 配置类
+spring:
+ quartz:
+ auto-startup: true # 测试环境,需要开启 Job
+ scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
+ job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
+ wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
+ properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
+ org:
+ quartz:
+ # Scheduler 相关配置
+ scheduler:
+ instanceName: schedulerName
+ instanceId: AUTO # 自动生成 instance ID
+ # JobStore 相关配置
+ jobStore:
+ # JobStore 实现类。可见博客:https://blog.csdn.net/weixin_42458219/article/details/122247162
+ class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+ isClustered: true # 是集群模式
+ clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
+ misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
+ # 线程池相关配置
+ threadPool:
+ threadCount: 25 # 线程池大小。默认为 10 。
+ threadPriority: 5 # 线程优先级
+ class: org.quartz.simpl.SimpleThreadPool # 线程池类型
+ jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
+ initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
+
+--- #################### 配置中心相关配置 ####################
+
+# Apollo 配置中心
+apollo:
+ bootstrap:
+ enabled: true # 设置 Apollo 在启动阶段生效
+ eagerLoad:
+ enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
+ jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
+ dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigDAOImpl
+ url: ${spring.datasource.dynamic.datasource.master.url}
+ username: ${spring.datasource.dynamic.datasource.master.username}
+ password: ${spring.datasource.dynamic.datasource.master.password}
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+ acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+ expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+# Resilience4j 配置项
+resilience4j:
+ ratelimiter:
+ instances:
+ backendA:
+ limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
+ limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
+ timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
+ register-health-indicator: true # 是否注册到健康监测
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+ endpoints:
+ web:
+ base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+ exposure:
+ include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ url: http://127.0.0.1:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ # Spring Boot Admin Server 服务端的相关配置
+ context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+ file:
+ name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 微信公众号相关配置 ####################
+wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+ mp:
+ # 公众号配置(必填)
+ app-id: wx041349c6f39b268b
+ secret: 5abee519483bc9f8cb37ce280e814bd0
+ # 存储配置,解决 AccessToken 的跨节点的共享
+ config-storage:
+ type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+ key-prefix: wx # Redis Key 的前缀 TODO 芋艿:解决下 Redis key 管理的配置
+ http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+yudao:
+ security:
+ token-header: Authorization
+ mock-enable: true
+ mock-secret: test
+ xss:
+ enable: false
+ exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
+ - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
+ - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
+ pay:
+ pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
+ pay-return-url: http://niubi.natapp1.cc/api/pay/order/return
+ refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
+ demo: true # 开启演示模式
+
+justauth:
+ enabled: true
+ type:
+ DINGTALK: # 钉钉
+ client-id: dingvrnreaje3yqvzhxg
+ client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+ ignore-check-redirect-uri: true
+ WECHAT_ENTERPRISE: # 企业微信
+ client-id: wwd411c69a39ad2e54
+ client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+ agent-id: 1000004
+ ignore-check-redirect-uri: true
+ cache:
+ type: REDIS
+ prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+ timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
new file mode 100644
index 000000000..5476307a6
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
@@ -0,0 +1,225 @@
+server:
+ port: 48081
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+ # 数据源配置项
+ autoconfigure:
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+ datasource:
+ druid: # Druid 【监控】相关的全局配置
+ web-stat-filter:
+ enabled: true
+ stat-view-servlet:
+ enabled: true
+ allow: # 设置白名单,不填则允许所有访问
+ url-pattern: /druid/*
+ login-username: # 控制台管理用户名和密码
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ log-slow-sql: true # 慢 SQL 记录
+ slow-sql-millis: 100
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
+ dynamic: # 多数据源配置
+ druid: # Druid 【连接池】相关的全局配置
+ initial-size: 5 # 初始连接数
+ min-idle: 10 # 最小连接池数量
+ max-active: 20 # 最大连接池数量
+ max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+ time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+ min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+ max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+ validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ primary: master
+ datasource:
+ master:
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
+# url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
+# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
+# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例
+ username: root
+ password: 123456
+# username: sa
+# password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
+ slave: # 模拟从库,可根据自己需要修改
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
+# url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
+# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
+# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例
+ username: root
+ password: 123456
+# username: sa
+# password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
+
+ # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+ redis:
+ host: 127.0.0.1 # 地址
+ port: 6379 # 端口
+ database: 0 # 数据库索引
+# password: 123456 # 密码,建议生产环境开启
+
+jasypt:
+ encryptor:
+ password: yuanma # 加解密的秘钥
+
+--- #################### 定时任务相关配置 ####################
+
+# Quartz 配置项,对应 QuartzProperties 配置类
+spring:
+ quartz:
+ auto-startup: false # 本地开发环境,尽量不要开启 Job
+ scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
+ job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
+ wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
+ properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
+ org:
+ quartz:
+ # Scheduler 相关配置
+ scheduler:
+ instanceName: schedulerName
+ instanceId: AUTO # 自动生成 instance ID
+ # JobStore 相关配置
+ jobStore:
+ # JobStore 实现类。可见博客:https://blog.csdn.net/weixin_42458219/article/details/122247162
+ class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+ isClustered: true # 是集群模式
+ clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
+ misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
+ # 线程池相关配置
+ threadPool:
+ threadCount: 25 # 线程池大小。默认为 10 。
+ threadPriority: 5 # 线程优先级
+ class: org.quartz.simpl.SimpleThreadPool # 线程池类型
+ jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
+ initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
+
+--- #################### 配置中心相关配置 ####################
+
+# Apollo 配置中心
+apollo:
+ bootstrap:
+ enabled: true # 设置 Apollo 在启动阶段生效
+ eagerLoad:
+ enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
+ jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
+ dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigDAOImpl
+ url: ${spring.datasource.dynamic.datasource.master.url}
+ username: ${spring.datasource.dynamic.datasource.master.username}
+ password: ${spring.datasource.dynamic.datasource.master.password}
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+ acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+ expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+# Resilience4j 配置项
+resilience4j:
+ ratelimiter:
+ instances:
+ backendA:
+ limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
+ limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
+ timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
+ register-health-indicator: true # 是否注册到健康监测
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+ endpoints:
+ web:
+ base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+ exposure:
+ include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ url: http://127.0.0.1:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ # Spring Boot Admin Server 服务端的相关配置
+ context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+ file:
+ name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+ level:
+ # 配置自己写的 MyBatis Mapper 打印日志
+ cn.iocoder.yudao.module.bpm.dal.mysql: debug
+ cn.iocoder.yudao.module.infra.dal.mysql: debug
+ cn.iocoder.yudao.module.pay.dal.mysql: debug
+ cn.iocoder.yudao.module.system.dal.mysql: debug
+ cn.iocoder.yudao.module.tool.dal.mysql: debug
+ cn.iocoder.yudao.module.member.dal.mysql: debug
+
+--- #################### 微信公众号相关配置 ####################
+wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+ mp:
+ # 公众号配置(必填)
+ app-id: wx041349c6f39b268b
+ secret: 5abee519483bc9f8cb37ce280e814bd0
+ # 存储配置,解决 AccessToken 的跨节点的共享
+ config-storage:
+ type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+ key-prefix: wx # Redis Key 的前缀 TODO 芋艿:解决下 Redis key 管理的配置
+ http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+yudao:
+ captcha:
+ enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试
+ security:
+ token-header: Authorization
+ mock-enable: true
+ mock-secret: test
+ xss:
+ enable: false
+ exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
+ - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
+ - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
+ pay:
+ pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
+ pay-return-url: http://niubi.natapp1.cc/api/pay/order/return
+ refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
+ demo: false # 关闭演示模式
+
+justauth:
+ enabled: true
+ type:
+ DINGTALK: # 钉钉
+ client-id: dingvrnreaje3yqvzhxg
+ client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+ ignore-check-redirect-uri: true
+ WECHAT_ENTERPRISE: # 企业微信
+ client-id: wwd411c69a39ad2e54
+ client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+ agent-id: 1000004
+ ignore-check-redirect-uri: true
+ cache:
+ type: REDIS
+ prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+ timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml
new file mode 100644
index 000000000..7e33378aa
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml
@@ -0,0 +1,142 @@
+spring:
+ application:
+ name: system-server
+
+ profiles:
+ active: local
+
+ main:
+ allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。
+
+ # Servlet 配置
+ servlet:
+ # 文件上传相关配置项
+ multipart:
+ max-file-size: 16MB # 单个文件大小
+ max-request-size: 32MB # 设置总上传的文件大小
+ mvc:
+ pathmatch:
+ matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类
+
+ # Jackson 配置项
+ jackson:
+ serialization:
+ write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳
+ write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401
+ write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳
+ fail-on-empty-beans: false # 允许序列化无属性的 Bean
+
+ # Cache 配置项
+ cache:
+ type: REDIS
+ redis:
+ time-to-live: 1h # 设置过期时间为 1 小时
+
+ # 工作流 Activiti 配置
+ activiti:
+ # 1. false: 默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
+ # 2. true: 启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
+ # 3. create_drop: 启动时自动创建表,关闭时自动删除表
+ # 4. drop_create: 启动时,删除旧表,再创建新表
+ database-schema-update: true # 设置为 false,可通过 sql/activiti.sql 初始化
+ db-history-used: true # activiti7 默认 false 不生成历史信息表,需手动设置开启
+ check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程
+ history-level: full # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数
+
+# 工作流 Flowable 配置
+flowable:
+ # 1. false: 默认值,Flowable 启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
+ # 2. true: 启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
+ # 3. create_drop: 启动时自动创建表,关闭时自动删除表
+ # 4. drop_create: 启动时,删除旧表,再创建新表
+ database-schema-update: true # 设置为 false,可通过 https://github.com/flowable/flowable-sql 初始化
+ db-history-used: true # flowable6 默认 true 生成信息表,无需手动设置
+ check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程
+ history-level: full # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数
+
+# MyBatis Plus 的配置项
+mybatis-plus:
+ configuration:
+ map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
+ global-config:
+ db-config:
+ id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。
+# id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库
+# id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库
+# id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解
+ logic-delete-value: 1 # 逻辑已删除值(默认为 1)
+ logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
+ type-aliases-package: ${yudao.info.base-package}.module.*.dal.dataobject
+
+--- #################### 芋道相关配置 ####################
+
+yudao:
+ info:
+ version: 1.0.0
+ base-package: cn.iocoder.yudao
+ web:
+ admin-api:
+ prefix: /admin-api
+ controller: '**.controller.admin.**'
+ app-api:
+ prefix: /app-api
+ controller: '**.controller.app.**'
+ admin-ui:
+ url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址
+ swagger:
+ title: 管理后台
+ description: 提供管理员管理的所有功能
+ version: ${yudao.info.version}
+ base-package: ${yudao.info.base-package}
+ captcha:
+ timeout: 5m
+ width: 160
+ height: 60
+ codegen:
+ base-package: ${yudao.info.base-package}
+ db-schemas: ${spring.datasource.dynamic.datasource.master.name}
+ error-code: # 错误码相关配置项
+ constants-class-list:
+ - cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.member.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.system.enums.ErrorCodeConstants
+ tenant: # 多租户相关配置项
+ enable: true
+ ignore-urls:
+ - /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号
+ - /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关
+ - /admin-api/infra/file/*/get/** # 获取图片,和租户无关
+ - /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号
+ ignore-tables:
+ - system_tenant
+ - system_tenant_package
+ - system_dict_data
+ - system_dict_type
+ - system_error_code
+ - system_menu
+ - system_sms_channel
+ - system_sms_template
+ - system_sms_log
+ - system_sensitive_word
+ - system_oauth2_client
+ - infra_codegen_column
+ - infra_codegen_table
+ - infra_test_demo
+ - infra_config
+ - infra_file_config
+ - infra_file
+ - infra_file_content
+ - infra_job
+ - infra_job_log
+ - infra_job_log
+ - infra_data_source_config
+ sms-code: # 短信验证码相关的配置项
+ expire-times: 10m
+ send-frequency: 1m
+ send-maximum-quantity-per-day: 10
+ begin-code: 9999 # 这里配置 9999 的原因是,测试方便。
+ end-code: 9999 # 这里配置 9999 的原因是,测试方便。
+
+debug: false
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/banner.txt b/yudao-module-system/yudao-module-system-biz/src/main/resources/banner.txt
new file mode 100644
index 000000000..39a441d7d
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/banner.txt
@@ -0,0 +1,17 @@
+芋道源码 http://www.iocoder.cn
+Application Version: ${yudao.info.version}
+Spring Boot Version: ${spring-boot.version}
+
+.__ __. ______ .______ __ __ _______
+| \ | | / __ \ | _ \ | | | | / _____|
+| \| | | | | | | |_) | | | | | | | __
+| . ` | | | | | | _ < | | | | | | |_ |
+| |\ | | `--' | | |_) | | `--' | | |__| |
+|__| \__| \______/ |______/ \______/ \______|
+
+███╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗
+████╗ ██║██╔═══██╗ ██╔══██╗██║ ██║██╔════╝
+██╔██╗ ██║██║ ██║ ██████╔╝██║ ██║██║ ███╗
+██║╚██╗██║██║ ██║ ██╔══██╗██║ ██║██║ ██║
+██║ ╚████║╚██████╔╝ ██████╔╝╚██████╔╝╚██████╔╝
+╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/logback-spring.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/logback-spring.xml
new file mode 100644
index 000000000..8c85ad493
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/logback-spring.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${PATTERN_DEFAULT}
+
+
+
+
+
+
+
+
+
+ ${PATTERN_DEFAULT}
+
+
+
+ ${LOG_FILE}
+
+
+ ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}
+
+ ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}
+
+ ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}
+
+ ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}
+
+ ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30}
+
+
+
+
+
+ 0
+
+ 256
+
+
+
+
+
+
+
+ ${PATTERN_DEFAULT}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+