From 9eef32d9ea9fec80104c71f4a8761b420eae0c94 Mon Sep 17 00:00:00 2001
From: yangyang01000846 <15195822163@163.com>
Date: Wed, 12 Nov 2025 13:41:29 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=BD=9C=E4=B8=9A?=
=?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=A1=B9=E7=9B=AE=E6=8F=90=E4=BA=A4=EF=BC=9B?=
=?UTF-8?q?mdc=E6=97=A5=E5=BF=97=E8=BF=BD=E8=B8=AA=E6=8F=90=E6=95=88?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
capability/src/main/resources/logback.xml | 29 +++-
common/pom.xml | 9 ++
.../mdc/FeignMdcRequestInterceptor.java | 19 +++
.../common/common/mdc/HttpFilterConfig.java | 15 ++
.../common/common/mdc/MdcTaskDecorator.java | 23 +++
.../sdm/common/common/mdc/TraceIdFilter.java | 62 ++++++++
.../com/sdm/common/utils/log/CoreLogger.java | 142 ++++++++++++++++++
data/src/main/resources/logback.xml | 28 +++-
pom.xml | 1 +
project/src/main/resources/logback.xml | 31 +++-
submit/pom.xml | 141 +++++++++++++++++
.../com/sdm/submit/SubmitApplication.java | 19 +++
.../DecryptEnvironmentPostProcessor.java | 49 ++++++
.../com/sdm/submit/config/MinioConfig.java | 40 +++++
.../submit/config/OkHttpConfiguration.java | 73 +++++++++
.../com/sdm/submit/config/RedisConfig.java | 45 ++++++
.../submit/config/ScheduledTaskConfig.java | 21 +++
.../com/sdm/submit/config/SwaggerConfig.java | 22 +++
.../config/mybatis/DBContextHolder.java | 48 ++++++
.../sdm/submit/config/mybatis/DBTypeEnum.java | 10 ++
.../submit/config/mybatis/DatabasePlugin.java | 88 +++++++++++
.../config/mybatis/DynamicDataSource.java | 17 +++
.../config/mybatis/MybatisPlusConfig.java | 97 ++++++++++++
.../thread/SubmitCommonThreadPoolConfig.java | 74 +++++++++
.../sdm/submit/controller/TestController.java | 66 ++++++++
.../main/resources/META-INF/spring.factories | 1 +
submit/src/main/resources/application-dev.yml | 127 ++++++++++++++++
.../src/main/resources/application-local.yml | 117 +++++++++++++++
.../src/main/resources/application-prod.yml | 109 ++++++++++++++
.../src/main/resources/application-test.yml | 101 +++++++++++++
submit/src/main/resources/application.yml | 3 +
submit/src/main/resources/bin/log.sh | 13 ++
submit/src/main/resources/bin/restart.sh | 25 +++
submit/src/main/resources/bin/start.sh | 74 +++++++++
submit/src/main/resources/bin/status.sh | 20 +++
submit/src/main/resources/bin/stop.sh | 40 +++++
submit/src/main/resources/logback.xml | 89 +++++++++++
system/src/main/resources/logback.xml | 30 +++-
task/src/main/resources/logback.xml | 30 +++-
39 files changed, 1939 insertions(+), 9 deletions(-)
create mode 100644 common/src/main/java/com/sdm/common/common/mdc/FeignMdcRequestInterceptor.java
create mode 100644 common/src/main/java/com/sdm/common/common/mdc/HttpFilterConfig.java
create mode 100644 common/src/main/java/com/sdm/common/common/mdc/MdcTaskDecorator.java
create mode 100644 common/src/main/java/com/sdm/common/common/mdc/TraceIdFilter.java
create mode 100644 common/src/main/java/com/sdm/common/utils/log/CoreLogger.java
create mode 100644 submit/pom.xml
create mode 100644 submit/src/main/java/com/sdm/submit/SubmitApplication.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/DecryptEnvironmentPostProcessor.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/MinioConfig.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/OkHttpConfiguration.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/RedisConfig.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/ScheduledTaskConfig.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/SwaggerConfig.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/mybatis/DBContextHolder.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/mybatis/DBTypeEnum.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/mybatis/DatabasePlugin.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/mybatis/DynamicDataSource.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/mybatis/MybatisPlusConfig.java
create mode 100644 submit/src/main/java/com/sdm/submit/config/thread/SubmitCommonThreadPoolConfig.java
create mode 100644 submit/src/main/java/com/sdm/submit/controller/TestController.java
create mode 100644 submit/src/main/resources/META-INF/spring.factories
create mode 100644 submit/src/main/resources/application-dev.yml
create mode 100644 submit/src/main/resources/application-local.yml
create mode 100644 submit/src/main/resources/application-prod.yml
create mode 100644 submit/src/main/resources/application-test.yml
create mode 100644 submit/src/main/resources/application.yml
create mode 100644 submit/src/main/resources/bin/log.sh
create mode 100644 submit/src/main/resources/bin/restart.sh
create mode 100644 submit/src/main/resources/bin/start.sh
create mode 100644 submit/src/main/resources/bin/status.sh
create mode 100644 submit/src/main/resources/bin/stop.sh
create mode 100644 submit/src/main/resources/logback.xml
diff --git a/capability/src/main/resources/logback.xml b/capability/src/main/resources/logback.xml
index 6a733e3b..3571bfbb 100644
--- a/capability/src/main/resources/logback.xml
+++ b/capability/src/main/resources/logback.xml
@@ -6,7 +6,10 @@
-
+
+
+
+
@@ -36,6 +39,30 @@
+
+
+ ${LOG_HOME}/core.log
+
+ ${LOG_HOME}/core.log.%d{yyyy-MM-dd}.%i.log
+ 30
+ 500MB
+ 10MB
+
+
+
+ [%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %X{callerInfo} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
+
+
+ INFO
+
+
+
+
+
+
+
+
+
diff --git a/common/pom.xml b/common/pom.xml
index 830bdb73..5243b9f3 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -45,6 +45,15 @@
org.springdoc
springdoc-openapi-starter-webmvc-ui
+
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ 5.0.0
+ provided
+
+
diff --git a/common/src/main/java/com/sdm/common/common/mdc/FeignMdcRequestInterceptor.java b/common/src/main/java/com/sdm/common/common/mdc/FeignMdcRequestInterceptor.java
new file mode 100644
index 00000000..098f6922
--- /dev/null
+++ b/common/src/main/java/com/sdm/common/common/mdc/FeignMdcRequestInterceptor.java
@@ -0,0 +1,19 @@
+package com.sdm.common.common.mdc;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FeignMdcRequestInterceptor implements RequestInterceptor {
+ @Override
+ public void apply(RequestTemplate template) {
+ // 这个apply方法会在每次Feign客户端方法调用前执行
+ String traceId = MDC.get("traceId");
+ if (StringUtils.isNotBlank(traceId)) {
+ template.header("X-Trace-Id", traceId);
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/sdm/common/common/mdc/HttpFilterConfig.java b/common/src/main/java/com/sdm/common/common/mdc/HttpFilterConfig.java
new file mode 100644
index 00000000..eff1d851
--- /dev/null
+++ b/common/src/main/java/com/sdm/common/common/mdc/HttpFilterConfig.java
@@ -0,0 +1,15 @@
+package com.sdm.common.common.mdc;
+
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class HttpFilterConfig {
+ @Bean
+ public FilterRegistrationBean traceIdFilter() {
+ FilterRegistrationBean bean = new FilterRegistrationBean<>(new TraceIdFilter());
+ bean.setOrder(1);
+ return bean;
+ }
+}
diff --git a/common/src/main/java/com/sdm/common/common/mdc/MdcTaskDecorator.java b/common/src/main/java/com/sdm/common/common/mdc/MdcTaskDecorator.java
new file mode 100644
index 00000000..c4c097f6
--- /dev/null
+++ b/common/src/main/java/com/sdm/common/common/mdc/MdcTaskDecorator.java
@@ -0,0 +1,23 @@
+package com.sdm.common.common.mdc;
+
+import org.slf4j.MDC;
+import org.springframework.core.task.TaskDecorator;
+
+import java.util.Map;
+
+public class MdcTaskDecorator implements TaskDecorator {
+ @Override
+ public Runnable decorate(Runnable runnable) {
+ Map contextMap = MDC.getCopyOfContextMap();
+ return () -> {
+ try {
+ if (contextMap != null) {
+ MDC.setContextMap(contextMap);
+ }
+ runnable.run();
+ } finally {
+ MDC.clear();
+ }
+ };
+ }
+}
diff --git a/common/src/main/java/com/sdm/common/common/mdc/TraceIdFilter.java b/common/src/main/java/com/sdm/common/common/mdc/TraceIdFilter.java
new file mode 100644
index 00000000..87be0ffe
--- /dev/null
+++ b/common/src/main/java/com/sdm/common/common/mdc/TraceIdFilter.java
@@ -0,0 +1,62 @@
+package com.sdm.common.common.mdc;
+
+import jakarta.servlet.*;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.slf4j.MDC;
+
+import java.io.IOException;
+import java.util.UUID;
+
+
+
+// 拦截所有 HTTP 请求
+public class TraceIdFilter implements Filter {
+
+ /**
+ * MDC 中存储 traceId 的 key(需与日志格式中的 %X{traceId} 对应)
+ */
+ public static final String TRACE_ID_KEY = "traceId";
+
+ /**
+ * 响应头中返回 traceId 的 key(前端可通过此 key 获取)
+ */
+ public static final String TRACE_ID_HEADER = "X-Trace-Id";
+
+ @Override
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
+ throws IOException, ServletException {
+
+ HttpServletRequest request = (HttpServletRequest) servletRequest;
+ HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+ try {
+ // 1. 生成或获取 traceId(优先从请求头获取,支持前端传递,便于联调)
+ String traceId = request.getHeader(TRACE_ID_HEADER);
+ if (traceId == null || traceId.trim().isEmpty()) {
+ // 生成 UUID 并去除横杠(32位,简洁易读)
+ traceId = UUID.randomUUID().toString().replace("-", "");
+ }
+
+ // 2. 存入 MDC(供日志打印使用,所有日志框架可通过 %X{traceId} 获取)
+ MDC.put(TRACE_ID_KEY, traceId);
+
+ // 3. 写入响应头(返回给前端,便于前端排查问题时匹配日志)
+ response.setHeader(TRACE_ID_HEADER, traceId);
+
+ // 4. 放行请求,继续执行后续过滤器/控制器
+ filterChain.doFilter(request, response);
+
+ } finally {
+ // 5. 清除 MDC 中的 traceId(关键!避免线程池复用导致的 traceId 污染)
+ MDC.remove(TRACE_ID_KEY);
+ }
+ }
+
+ // 初始化和销毁方法可空实现(无需额外操作)
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {}
+
+ @Override
+ public void destroy() {}
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/sdm/common/utils/log/CoreLogger.java b/common/src/main/java/com/sdm/common/utils/log/CoreLogger.java
new file mode 100644
index 00000000..08b734cd
--- /dev/null
+++ b/common/src/main/java/com/sdm/common/utils/log/CoreLogger.java
@@ -0,0 +1,142 @@
+package com.sdm.common.utils.log;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
+/**
+ * 核心业务日志工具类
+ * 特性:
+ * 1. 日志自动输出到 core.log
+ * 2. 打印原始调用类名、方法名和行号
+ * 3. 支持 SLF4J 标准日志方法(info/error/debug 等)
+ */
+public class CoreLogger {
+
+ private static final Logger coreLog = LoggerFactory.getLogger("coreLogger");
+
+ private static final String CALLER_INFO_KEY = "callerInfo";
+
+ // 私有构造器
+ private CoreLogger() {
+ throw new AssertionError("工具类不允许实例化");
+ }
+
+ /**
+ * 获取原始调用位置信息(类名.方法名(行号))
+ * 跳过工具类自身的调用栈,定位到真实业务代码
+ */
+ private static String getCallerInfo() {
+ // 获取当前线程调用栈
+ StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
+
+ // 栈索引说明(根据实际调用链调整):
+ // 0: Thread.getStackTrace()
+ // 1: CoreLogger.getCallerInfo()
+ // 2: CoreLogger.xxx()(如 info/error 等工具方法)
+ // 3: 实际业务类的调用方法(目标位置)
+ if (stackTrace.length >= 4) {
+ StackTraceElement caller = stackTrace[3];
+ return String.format(
+ "%s.%s(%d)",
+ caller.getClassName(), // 原始调用类名
+ caller.getMethodName(), // 原始调用方法名
+ caller.getLineNumber() // 原始调用行号
+ );
+ }
+ // 异常情况:无法获取调用栈时返回默认值
+ return "UnknownCaller";
+ }
+
+ // -------------------- 以下为 SLF4J 标准日志方法封装 --------------------
+
+ public static void debug(String message) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.debug(message);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY); // 清除 MDC,避免线程复用污染
+ }
+ }
+
+ public static void debug(String message, Object... args) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.debug(message, args);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void info(String message) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.info(message);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void info(String message, Object... args) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.info(message, args);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void warn(String message) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.warn(message);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void warn(String message, Object... args) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.warn(message, args);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void warn(String message, Throwable throwable) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.warn(message, throwable);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void error(String message) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.error(message);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void error(String message, Object... args) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.error(message, args);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+
+ public static void error(String message, Throwable throwable) {
+ try {
+ MDC.put(CALLER_INFO_KEY, getCallerInfo());
+ coreLog.error(message, throwable);
+ } finally {
+ MDC.remove(CALLER_INFO_KEY);
+ }
+ }
+}
\ No newline at end of file
diff --git a/data/src/main/resources/logback.xml b/data/src/main/resources/logback.xml
index 10e84a15..04d682e6 100644
--- a/data/src/main/resources/logback.xml
+++ b/data/src/main/resources/logback.xml
@@ -6,9 +6,9 @@
-
+
-
+
@@ -58,6 +58,30 @@
+
+
+ ${LOG_HOME}/core.log
+
+ ${LOG_HOME}/core.log.%d{yyyy-MM-dd}.%i.log
+ 30
+ 500MB
+ 10MB
+
+
+
+ [%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %X{callerInfo} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
+
+
+ INFO
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index e69c406e..839b1fc9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,6 +20,7 @@
data
pbs
system
+ submit
common
diff --git a/project/src/main/resources/logback.xml b/project/src/main/resources/logback.xml
index 0e8a7747..279e8a09 100644
--- a/project/src/main/resources/logback.xml
+++ b/project/src/main/resources/logback.xml
@@ -6,7 +6,10 @@
-
+
+
+
+
@@ -29,7 +32,7 @@
- ${CONSOLE_LOG_PATTERN}
+ ${FILE_LOG_PATTERN}
UTF-8
@@ -38,6 +41,30 @@
+
+
+ ${LOG_HOME}/core.log
+
+ ${LOG_HOME}/core.log.%d{yyyy-MM-dd}.%i.log
+ 30
+ 500MB
+ 10MB
+
+
+
+ [%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %X{callerInfo} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
+
+
+ INFO
+
+
+
+
+
+
+
+
+
diff --git a/submit/pom.xml b/submit/pom.xml
new file mode 100644
index 00000000..84be21a8
--- /dev/null
+++ b/submit/pom.xml
@@ -0,0 +1,141 @@
+
+
+ 4.0.0
+
+ com.sdm
+ SDM
+ 1.0-SNAPSHOT
+
+ submit
+ 0.0.1-SNAPSHOT
+ submit
+ submit
+
+ 17
+ UTF-8
+ UTF-8
+ 3.3.5
+
+
+
+
+ com.sdm
+ common
+ 0.0.1-SNAPSHOT
+
+
+ *
+ *
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ commons-net
+ commons-net
+ 3.11.1
+
+
+ org.apache.commons
+ commons-lang3
+ 3.14.0
+
+
+ org.aspectj
+ aspectjweaver
+
+
+ javax.annotation
+ javax.annotation-api
+ 1.3.2
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.10.0
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+
+
+
+ io.minio
+ minio
+ 8.5.7
+
+
+
+
+ commons-io
+ commons-io
+ 2.11.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/submit/src/main/java/com/sdm/submit/SubmitApplication.java b/submit/src/main/java/com/sdm/submit/SubmitApplication.java
new file mode 100644
index 00000000..9c0d9cf8
--- /dev/null
+++ b/submit/src/main/java/com/sdm/submit/SubmitApplication.java
@@ -0,0 +1,19 @@
+package com.sdm.submit;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(scanBasePackages = {"com.sdm.submit","com.sdm.common"})
+@EnableDiscoveryClient
+@EnableScheduling
+@EnableFeignClients(basePackages = "com.sdm.common.feign")
+public class SubmitApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SubmitApplication.class, args);
+ }
+
+}
diff --git a/submit/src/main/java/com/sdm/submit/config/DecryptEnvironmentPostProcessor.java b/submit/src/main/java/com/sdm/submit/config/DecryptEnvironmentPostProcessor.java
new file mode 100644
index 00000000..a1b28215
--- /dev/null
+++ b/submit/src/main/java/com/sdm/submit/config/DecryptEnvironmentPostProcessor.java
@@ -0,0 +1,49 @@
+package com.sdm.submit.config;
+
+import com.sdm.common.utils.AESUtil;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.env.EnvironmentPostProcessor;
+import org.springframework.core.env.*;
+import org.springframework.stereotype.Component;
+
+import java.util.Properties;
+
+@Component
+public class DecryptEnvironmentPostProcessor implements EnvironmentPostProcessor {
+ @Override
+ public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
+ Properties props = new Properties(); // 临时存储需要替换的配置
+ // 假设加密密码前缀为 "ENC(",后缀为 ")"
+ MutablePropertySources propertySources = environment.getPropertySources();
+ for (PropertySource> propertySource : propertySources) {
+ if (propertySource instanceof EnumerablePropertySource) {
+ EnumerablePropertySource> enumerablePropertySource = (EnumerablePropertySource>) propertySource;
+ String[] propertyNames = enumerablePropertySource.getPropertyNames();
+ // 遍历所有配置key:value
+ for (String propertyName : propertyNames) {
+ String propertyVal = environment.getProperty(propertyName);
+ // 根据自己写的规则来解析那些配置是需要解密的
+ if (propertyVal != null && propertyVal.startsWith("ENC(") && propertyVal.endsWith(")")) {
+ // 解析得到加密的数据
+ String encryptedValue = propertyVal.substring(4, propertyVal.length() - 1);
+ // 调用自定义工具类解密
+ String decryptedValue = null;
+ try {
+ decryptedValue = AESUtil.decode(encryptedValue);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ // 保存需要替换的配置
+ props.put(propertyName, decryptedValue);
+ }
+ }
+ }
+ }
+ // 添加解密后的属性到环境中
+ if (!props.isEmpty()) {
+ PropertiesPropertySource pps = new PropertiesPropertySource("decryptedProperties", props);
+ environment.getPropertySources().addFirst(pps);
+ }
+ }
+}
+
diff --git a/submit/src/main/java/com/sdm/submit/config/MinioConfig.java b/submit/src/main/java/com/sdm/submit/config/MinioConfig.java
new file mode 100644
index 00000000..0999feed
--- /dev/null
+++ b/submit/src/main/java/com/sdm/submit/config/MinioConfig.java
@@ -0,0 +1,40 @@
+package com.sdm.submit.config;
+
+import io.minio.MinioClient;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MinioConfig {
+
+ @Value("${minio.endpoint}")
+ private String endpoint;
+
+ @Value("${minio.port}") // API端口,默认9000
+ private int port;
+
+ @Value("${minio.access-key}")
+ private String accessKey;
+
+ @Value("${minio.secret-key}")
+ private String secretKey;
+
+ @Value("${minio.bucket-name}")
+ private String bucketName;
+
+ @Value("${minio.secure}")
+ private boolean secure;
+
+ @Bean
+ public MinioClient minioClient() {
+ return MinioClient.builder()
+ .endpoint(endpoint, port, secure)
+ .credentials(accessKey, secretKey)
+ .build();
+ }
+
+ public String getBucketName() {
+ return bucketName;
+ }
+}
diff --git a/submit/src/main/java/com/sdm/submit/config/OkHttpConfiguration.java b/submit/src/main/java/com/sdm/submit/config/OkHttpConfiguration.java
new file mode 100644
index 00000000..c69e42fc
--- /dev/null
+++ b/submit/src/main/java/com/sdm/submit/config/OkHttpConfiguration.java
@@ -0,0 +1,73 @@
+package com.sdm.submit.config;
+
+import okhttp3.ConnectionPool;
+import okhttp3.OkHttpClient;
+import okhttp3.Protocol;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class OkHttpConfiguration {
+
+ @Bean
+ public OkHttpClient okHttpClient() {
+ return new OkHttpClient.Builder()
+ .sslSocketFactory(sslSocketFactory(), x509TrustManager())
+ //是否开启缓存
+ .retryOnConnectionFailure(true)
+ .connectionPool(pool())
+ .connectTimeout(60, TimeUnit.SECONDS)
+ .readTimeout(60, TimeUnit.SECONDS)
+ .writeTimeout(60, TimeUnit.SECONDS)
+ .hostnameVerifier((hostname, session) -> true)
+ .protocols(Collections.singletonList(Protocol.HTTP_1_1))
+ .build();
+ }
+
+ @Bean
+ public X509TrustManager x509TrustManager() {
+ return new X509TrustManager() {
+ @Override
+ public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+ };
+ }
+
+ @Bean
+ public SSLSocketFactory sslSocketFactory() {
+ try {
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+ sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom());
+ return sslContext.getSocketFactory();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Bean
+ public ConnectionPool pool() {
+ return new ConnectionPool(5000, 300, TimeUnit.SECONDS);
+ }
+}
diff --git a/submit/src/main/java/com/sdm/submit/config/RedisConfig.java b/submit/src/main/java/com/sdm/submit/config/RedisConfig.java
new file mode 100644
index 00000000..e30fa1c5
--- /dev/null
+++ b/submit/src/main/java/com/sdm/submit/config/RedisConfig.java
@@ -0,0 +1,45 @@
+package com.sdm.submit.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+
+ @Bean(name = "redisTemplate")
+ public RedisTemplate