修改:五所测试,gpl问题解决.定时任务xxljob拆分独立服务

This commit is contained in:
2026-04-13 13:50:05 +08:00
parent 27e40b08bd
commit 9b42a90190
51 changed files with 1243 additions and 803 deletions

85
job/pom.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sdm</groupId>
<artifactId>SDM</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>job</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>job</name>
<description>job</description>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.3.5</spring-boot.version>
</properties>
<dependencies>
<!-- 引入模块common -->
<dependency>
<groupId>com.sdm</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
<!-- XXL-JOB 核心依赖 -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>3.3.2</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,29 @@
package com.sdm.job;
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.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication(scanBasePackages = {"com.sdm.job","com.sdm.common"})
@EnableDiscoveryClient
@EnableScheduling
@EnableFeignClients(basePackages = "com.sdm.common.feign")
@ComponentScan(
excludeFilters = {
@ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
classes = com.sdm.common.aspect.DictTagsAutoFillAspect.class
)
}
)
public class JobApplication {
public static void main(String[] args) {
SpringApplication.run(JobApplication.class, args);
}
}

View File

@@ -0,0 +1,85 @@
package com.sdm.job.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class XxlJobConfig {
private static final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.admin.accessToken}")
private String accessToken;
@Value("${xxl.job.admin.timeout}")
private int timeout;
@Value("${xxl.job.executor.enabled}")
private Boolean enabled;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Value("${xxl.job.executor.excludedpackage}")
private String excludedPackage;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setTimeout(timeout);
xxlJobSpringExecutor.setEnabled(enabled);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
xxlJobSpringExecutor.setExcludedPackage(excludedPackage);
return xxlJobSpringExecutor;
}
/**
* 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP
*
* 1、引入依赖
* <dependency>
* <groupId>org.springframework.cloud</groupId>
* <artifactId>spring-cloud-commons</artifactId>
* <version>${version}</version>
* </dependency>
*
* 2、配置文件或者容器启动变量
* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
*
* 3、获取IP
* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
*/
}

View File

@@ -0,0 +1,31 @@
package com.sdm.job.schedule;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.feign.inter.data.IDataScheduleFeignClient;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
// 后期多节点部署,优化成分布式定时任务
@Component
@Slf4j
public class DataSchedule {
@Autowired
private IDataScheduleFeignClient dataScheduleFeignClient;
/**
* 定时筛选存储空间达到阈值的用户 发送告警消息
*/
@XxlJob("dataStorageMonitorHandler")
public void checkDataStorageSpaceAndSendAlert() throws Exception {
log.info("开始执行定时筛选存储空间达到阈值的用户任务");
// 业务逻辑方法调度
SdmResponse<String> response = dataScheduleFeignClient.dataStorageMonitor();
log.info("定时筛选存储空间达到阈值的用户任务执行完成");
}
}

View File

@@ -0,0 +1,30 @@
package com.sdm.job.schedule;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.feign.inter.pbs.IPbsScheduleFeignClient;
import com.sdm.common.utils.MdcUtil;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
// 后期多节点部署,优化成分布式定时任务
@Component
public class PbsSchedule {
@Autowired
private IPbsScheduleFeignClient pbsScheduleFeignClient;
// xxljob平台配置定时任务
@XxlJob("hpcJobStatusHandler")
public void hpcJobStatusHandler() throws Exception {
String traceId = MdcUtil.generateAndPutTraceId();
XxlJobHelper.log("XXL-JOB:拉起Hpc任务更新开始traceId:{}",traceId);
SdmResponse<String> response = pbsScheduleFeignClient.hpcJobStatusSync();
XxlJobHelper.log("XXL-JOB:拉起Hpc任务更新结束traceId:{}",traceId);
MdcUtil.removeTraceId();
}
}

View File

@@ -0,0 +1,72 @@
package com.sdm.job.schedule;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.feign.inter.project.IProjectScheduleFeignClient;
import com.sdm.common.utils.MdcUtil;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
// 后期多节点部署,优化成分布式定时任务
@Component
@Slf4j
public class ProjectSchedule {
@Autowired
private IProjectScheduleFeignClient projectScheduleFeignClient;
// xxljob平台配置定时任务
@XxlJob("commitmentDeadlineStatusHandler")
public void commitmentDeadlineStatusHandler() throws Exception {
String traceId = MdcUtil.generateAndPutTraceId();
XxlJobHelper.log("XXL-JOB:拉起commitmentDeadlineStatusHandler任务新开始traceId:{}",traceId);
SdmResponse<String> response = projectScheduleFeignClient.commitmentDeadlineStatusHandler();
XxlJobHelper.log("XXL-JOB:拉起commitmentDeadlineStatusHandler任务结束traceId:{}",traceId);
MdcUtil.removeTraceId();
}
@XxlJob("lyricEncExceptionHandler")
public void lyricEncExceptionHandler() throws Exception {
// 初始化traceId
String traceId = MdcUtil.generateAndPutTraceId();
XxlJobHelper.log("{} XXL-JOB:拉起lyric异常任务信息开始,param:{}", traceId);
long startTime = System.currentTimeMillis();
SdmResponse response = projectScheduleFeignClient.syncException();
long endTime = System.currentTimeMillis();
long second = (endTime - startTime) / 1000;
log.info("{} lyricEncExceptionHandler cost [{}] s", traceId,second);
log.info("{} lyricEncExceptionHandler result :{}", traceId, JSON.toJSONString(response));
XxlJobHelper.log("{} XXL-JOB:拉起lyric异常任务信息结束:{},耗时:{} s", traceId,JSON.toJSONString(response),second);
// 销毁
MdcUtil.removeTraceId();
}
// xxljob平台配置定时任务
@XxlJob("lyricTodoListHandler")
public void lyricTodoListHandler() throws Exception {
// 初始化traceId
String traceId = MdcUtil.generateAndPutTraceId();
String param = XxlJobHelper.getJobParam();
if(StringUtils.isBlank(param)){
log.warn("{} lyricTodoListHandler param null",traceId);
return;
}
XxlJobHelper.log("{} XXL-JOB:拉起lyric代办任务开始,param:{}", traceId,param);
JSONObject paramJson = JSONObject.parseObject(param);
long startTime = System.currentTimeMillis();
SdmResponse response = projectScheduleFeignClient.lyricTodoListSchedule(paramJson.getLong("tenantId"), paramJson.getLong("userId"));
long endTime = System.currentTimeMillis();
long second = (endTime - startTime) / 1000;
log.info("{} lyricTodoListHandler cost [{}] s", traceId,second);
log.info("{} lyricTodoListHandler result :{}", traceId,JSON.toJSONString(response));
XxlJobHelper.log("{} XXL-JOB:拉起lyric代办任务结束:{},耗时:{} s", traceId,JSON.toJSONString(response),second);
// 销毁
MdcUtil.removeTraceId();
}
}

View File

@@ -0,0 +1,72 @@
server:
port: 7108
tomcat:
# 等待客户端发送数据的超时(毫秒)
connection-timeout: 60000
# Keep-Alive 长连接保持时间(毫秒)
keep-alive-timeout: 30000
# 异步超时(根据业务需要)
async-timeout: -1
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
application:
name: job
# 关闭 Spring 的 “内存缓冲”
codec:
max-in-memory-size: -1
mvc:
async:
request-timeout: -1 # 🔥 关闭 Spring 异步超时(关键!)
cloud:
nacos:
discovery:
server-addr: 192.168.190.100:5848
group: DEV_GROUP
enabled: true
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
lombok:
anyConstructor:
addConstructorProperties: true
# xxljob 配置开始
xxl:
job:
admin:
# 调度中心地址列表
addresses: http://192.168.190.100:7110/xxl-job-admin
# 调度中心访问令牌
accessToken: default_token
# xxl-job 超时时间默认3秒
timeout: 3
executor:
# 执行器是否启用默认true
enabled: true
# 执行器应用名称
appname: spdm-job-executor
# 执行器注册地址默认使用address注册若为null则使用ip:port注册
address:
# 执行器IP
ip: ${XXL_JOB_EXECUTOR_IP:}
# 执行器端口,为了好记web服务端口+1000
port: 8108
# 执行器日志路径
logpath: /home/app/pbs/xxljob
# 执行器日志保留天数
logretentiondays: 14
# 执行器排除扫描的包,多个用逗号分隔,如 "org.package01" 或 "org.package01,org.package02"
excludedpackage:
# xxljob 配置结束

View File

@@ -0,0 +1,72 @@
server:
port: 7108
tomcat:
# 等待客户端发送数据的超时(毫秒)
connection-timeout: 60000
# Keep-Alive 长连接保持时间(毫秒)
keep-alive-timeout: 30000
# 异步超时(根据业务需要)
async-timeout: -1
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
application:
name: job
# 关闭 Spring 的 “内存缓冲”
codec:
max-in-memory-size: -1
mvc:
async:
request-timeout: -1 # 🔥 关闭 Spring 异步超时(关键!)
cloud:
nacos:
discovery:
server-addr: 192.168.190.161:8848
group: DEV_GROUP
enabled: true
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
lombok:
anyConstructor:
addConstructorProperties: true
# xxljob 配置开始
xxl:
job:
admin:
# 调度中心地址列表
addresses: http://192.168.190.161:7110/xxl-job-admin
# 调度中心访问令牌
accessToken: default_token
# xxl-job 超时时间默认3秒
timeout: 3
executor:
# 执行器是否启用默认true
enabled: true
# 执行器应用名称
appname: spdm-job-executor
# 执行器注册地址默认使用address注册若为null则使用ip:port注册
address:
# 执行器IP
ip: ${XXL_JOB_EXECUTOR_IP:}
# 执行器端口,为了好记web服务端口+1000
port: 8108
# 执行器日志路径
logpath: /home/app/pbs/xxljob
# 执行器日志保留天数
logretentiondays: 14
# 执行器排除扫描的包,多个用逗号分隔,如 "org.package01" 或 "org.package01,org.package02"
excludedpackage:
# xxljob 配置结束

View File

@@ -0,0 +1,72 @@
server:
port: 7108
tomcat:
# 等待客户端发送数据的超时(毫秒)
connection-timeout: 60000
# Keep-Alive 长连接保持时间(毫秒)
keep-alive-timeout: 30000
# 异步超时(根据业务需要)
async-timeout: -1
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
application:
name: job
# 关闭 Spring 的 “内存缓冲”
codec:
max-in-memory-size: -1
mvc:
async:
request-timeout: -1 # 🔥 关闭 Spring 异步超时(关键!)
cloud:
nacos:
discovery:
server-addr: 192.168.65.161:8848
group: DEV_GROUP
enabled: true
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
lombok:
anyConstructor:
addConstructorProperties: true
# xxljob 配置开始
xxl:
job:
admin:
# 调度中心地址列表
addresses: http://192.168.65.161:7110/xxl-job-admin
# 调度中心访问令牌
accessToken: default_token
# xxl-job 超时时间默认3秒
timeout: 3
executor:
# 执行器是否启用默认true
enabled: true
# 执行器应用名称
appname: spdm-job-executor
# 执行器注册地址默认使用address注册若为null则使用ip:port注册
address:
# 执行器IP
ip: ${XXL_JOB_EXECUTOR_IP:}
# 执行器端口,为了好记web服务端口+1000
port: 8108
# 执行器日志路径
logpath: /home/app/pbs/xxljob
# 执行器日志保留天数
logretentiondays: 14
# 执行器排除扫描的包,多个用逗号分隔,如 "org.package01" 或 "org.package01,org.package02"
excludedpackage:
# xxljob 配置结束

View File

@@ -0,0 +1,72 @@
server:
port: 7108
tomcat:
# 等待客户端发送数据的超时(毫秒)
connection-timeout: 60000
# Keep-Alive 长连接保持时间(毫秒)
keep-alive-timeout: 30000
# 异步超时(根据业务需要)
async-timeout: -1
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
application:
name: job
# 关闭 Spring 的 “内存缓冲”
codec:
max-in-memory-size: -1
mvc:
async:
request-timeout: -1 # 🔥 关闭 Spring 异步超时(关键!)
cloud:
nacos:
discovery:
server-addr: 192.168.2.166:8848
group: DEV_GROUP
enabled: true
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
lombok:
anyConstructor:
addConstructorProperties: true
# xxljob 配置开始
xxl:
job:
admin:
# 调度中心地址列表
addresses: http://127.0.0.1:7110/xxl-job-admin
# 调度中心访问令牌
accessToken: default_token
# xxl-job 超时时间默认3秒
timeout: 3
executor:
# 执行器是否启用默认true
enabled: true
# 执行器应用名称
appname: spdm-job-executor
# 执行器注册地址默认使用address注册若为null则使用ip:port注册
address:
# 执行器IP
ip: ${XXL_JOB_EXECUTOR_IP:}
# 执行器端口,为了好记web服务端口+1000
port: 8108
# 执行器日志路径
logpath: /home/app/pbs/xxljob
# 执行器日志保留天数
logretentiondays: 14
# 执行器排除扫描的包,多个用逗号分隔,如 "org.package01" 或 "org.package01,org.package02"
excludedpackage:
# xxljob 配置结束

View File

@@ -0,0 +1,72 @@
server:
port: 7108
tomcat:
# 等待客户端发送数据的超时(毫秒)
connection-timeout: 60000
# Keep-Alive 长连接保持时间(毫秒)
keep-alive-timeout: 30000
# 异步超时(根据业务需要)
async-timeout: -1
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
application:
name: job
# 关闭 Spring 的 “内存缓冲”
codec:
max-in-memory-size: -1
mvc:
async:
request-timeout: -1 # 🔥 关闭 Spring 异步超时(关键!)
cloud:
nacos:
discovery:
server-addr: 192.168.30.146:8848
group: DEV_GROUP
enabled: true
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
lombok:
anyConstructor:
addConstructorProperties: true
# xxljob 配置开始
xxl:
job:
admin:
# 调度中心地址列表
addresses: http://192.168.30.148:7110/xxl-job-admin
# 调度中心访问令牌
accessToken: default_token
# xxl-job 超时时间默认3秒
timeout: 3
executor:
# 执行器是否启用默认true
enabled: true
# 执行器应用名称
appname: spdm-job-executor
# 执行器注册地址默认使用address注册若为null则使用ip:port注册
address:
# 执行器IP
ip: ${XXL_JOB_EXECUTOR_IP:}
# 执行器端口,为了好记web服务端口+1000
port: 8108
# 执行器日志路径
logpath: /home/app/pbs/xxljob
# 执行器日志保留天数
logretentiondays: 14
# 执行器排除扫描的包,多个用逗号分隔,如 "org.package01" 或 "org.package01,org.package02"
excludedpackage:
# xxljob 配置结束

View File

@@ -0,0 +1,3 @@
spring:
profiles:
active: dev-65

View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Spring Boot 项目日志查看脚本
LOG_HOME="/home/app/job/logs"
LOG_FILE="${LOG_HOME}/running.log"
# 查看实时日志
if [ ! -f "${LOG_FILE}" ]; then
echo "日志文件不存在:${LOG_FILE}(可能项目未启动)"
exit 1
fi
echo "正在查看实时运行日志(按 Ctrl+C 退出)... 日志路径:${LOG_FILE}"
tail -f "${LOG_FILE}"

View File

@@ -0,0 +1,45 @@
#!/bin/bash
# Spring Boot 项目启动脚本
JAR_PATH="/home/app/job"
JAR_NAME="job-0.0.1-SNAPSHOT.jar"
FULL_JAR_PATH="${JAR_PATH}/${JAR_NAME}"
# 与logback.xml保持一致的日志路径
LOG_HOME="/home/app/job/logs"
LOG_FILE="${LOG_HOME}/running.log"
# JVM参数
JVM_OPTS="-Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_HOME}/heapdump.hprof"
# 函数定义
check_jar_exists() {
if [ ! -f "${FULL_JAR_PATH}" ]; then
echo "ERROR: Jar包不存在路径${FULL_JAR_PATH}"
exit 1
fi
}
get_running_pid() {
ps -ef | grep "${JAR_NAME}" | grep -v "grep" | awk '{print $2}'
}
# 检查是否已运行
PID=$(get_running_pid)
if [ -n "${PID}" ]; then
echo "项目已在运行中PID: ${PID}"
exit 0
fi
# 检查Jar包是否存在
check_jar_exists
# 确保日志目录存在
if [ ! -d "${LOG_HOME}" ]; then
mkdir -p "${LOG_HOME}"
echo "日志目录不存在,已自动创建:${LOG_HOME}"
fi
# 启动项目
echo "正在启动项目..."
nohup java ${JVM_OPTS} -Dspring.profiles.active=dev-65 -DXXL_JOB_EXECUTOR_IP=192.168.65.161 -Dspdm.enkey=XzKRqYnUypdE8VJ41yo/i0rMpZ0IlztSZ1PqWhr0q/c= -jar "${FULL_JAR_PATH}" > "${LOG_FILE}" 2>&1 &

View File

@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 彩色日志 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr([%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(%logger){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<property name="FILE_LOG_PATTERN" value="[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %logger : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<!-- 日志文件存储地址 -->
<property name="LOG_HOME" value="/home/app/job/logs" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- ===================== running.log 输出3GB上限 ===================== -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/running.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/running.log.%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
<maxFileSize>100MB</maxFileSize>
<MaxHistory>15</MaxHistory>
<TotalSizeCap>3GB</TotalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- ===================== core.log 专用输出2GB上限 ===================== -->
<appender name="CORE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/core.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/core.log.%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
<maxFileSize>100MB</maxFileSize>
<MaxHistory>15</MaxHistory>
<TotalSizeCap>2GB</TotalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %X{callerInfo} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<!-- 绑定 FeignClient -->
<logger name="FeignClient" level="INFO" additivity="false">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</logger>
<!-- 绑定 coreLogger -->
<logger name="coreLogger" level="INFO" additivity="false">
<appender-ref ref="CORE_FILE" />
<appender-ref ref="STDOUT" />
</logger>
<!-- ===================== 你原来的所有 SQL/MyBatis/包日志 全部保留 ===================== -->
<!-- MyBatis SQL语句输出配置 -->
<logger name="org.apache.ibatis" level="DEBUG"/>
<logger name="org.apache.ibatis.session.AutoMappingUnknownColumnBehavior" level="ERROR"/>
<logger name="org.apache.ibatis.logging" level="DEBUG"/>
<logger name="org.apache.ibatis.logging.jdbc" level="DEBUG"/>
<logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger" level="DEBUG"/>
<logger name="org.apache.ibatis.datasource" level="DEBUG"/>
<logger name="org.apache.ibatis.transaction" level="DEBUG"/>
<logger name="org.apache.ibatis.cache" level="DEBUG"/>
<logger name="org.mybatis" level="DEBUG"/>
<logger name="org.mybatis.spring" level="DEBUG"/>
<logger name="org.mybatis.spring.SqlSessionUtils" level="DEBUG"/>
<logger name="org.mybatis.spring.transaction" level="DEBUG"/>
<!-- MyBatis-Plus 相关日志配置 -->
<logger name="com.baomidou.mybatisplus" level="DEBUG"/>
<logger name="com.baomidou.mybatisplus.core" level="DEBUG"/>
<logger name="com.baomidou.mybatisplus.core.MybatisConfiguration" level="DEBUG"/>
<logger name="com.baomidou.mybatisplus.core.MybatisMapperRegistry" level="DEBUG"/>
<logger name="com.baomidou.mybatisplus.core.override.MybatisMapperProxy" level="DEBUG"/>
<logger name="com.baomidou.mybatisplus.extension" level="DEBUG"/>
<logger name="com.baomidou.mybatisplus.extension.spring" level="DEBUG"/>
<logger name="com.baomidou.mybatisplus.extension.MybatisPlusProperties" level="DEBUG"/>
<logger name="java.sql" level="DEBUG"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="java.sql.ResultSet" level="DEBUG"/>
<logger name="com.sdm.job" level="INFO"/>
</configuration>