Skip to content

Commit 760b21e

Browse files
committed
refactor(log):重构日志报表存储逻辑,使用saveOrUpdate替代原有save与update分离逻辑
- 报表mapper接口新增saveOrUpdate方法,替换原有的save与update分离操作- 日志报表存储逻辑优化,通过ON DUPLICATE KEY UPDATE实现插入或更新- 新增针对saveOrUpdate方法的单元测试用例- 调度中心报表初始化SQL优化,修复小概率情况下的增改竞争问题 - 完善调度组件日志记录,提高边界情况下的问题排查效率
1 parent cfcd293 commit 760b21e

5 files changed

Lines changed: 79 additions & 25 deletions

File tree

doc/XXL-JOB官方文档.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2598,17 +2598,15 @@ public void execute() {
25982598
- 2、【优化】执行器任务Bean扫描逻辑优化,完善懒加载Bean检测及过滤机制;
25992599
- 3、【优化】调度时间轮强化,保障不重不漏:调度时间轮单刻度数据去重,避免极端情况下任务重复执行;时间轮转动时校验临近刻度,避免极端情况下遗漏刻度;
26002600
- 4、【优化】任务调度中心调度锁逻辑优化,事务SQL下沉至Mapper层统一管理,并增加测试用例,提升代码可读性以及可维护性;
2601-
- 5、【优化】报表统计SQL优化,修复小概率情况下查询null值问题;
2602-
- 6、【重构】调度过期策略、调度类型策略逻辑重构,代码组件化拆分并完善日志,提升健壮性及可维护性;
2603-
- 7、【重构】任务调度中心底层组件重构,组件初始化以及销毁逻辑统一处理,任务触发及和回调逻辑优化,避免资源泄漏风险;
2604-
- 8、【重构】任务调度中心底层组件模块化拆分,移除组件单例以及静态代码逻辑,提升组件可维护性;
2605-
- 9、【修复】调度预读任务数量调整,改为调度线程池大小x10,降低事务颗粒度,提升性能及稳定性;
2606-
- 10、【修复】合并PR-2369,修复脚本任务参数取值问题;
2607-
- 11、【优化】调度组件日志完善,提升边界情况下问题定位效率;
2608-
- 12、【升级】升级多项maven依赖至较新版本,如 netty、groovy、spring、spring-ai、dify 等;
2609-
- 14、【优化】任务回调失败日志读写磁盘逻辑优化,解决极端情况下大文件读写内存问题;
2610-
- 15、【修复】脚本任务process销毁逻辑优化,解决风险情况下脚本进程无法终止问题;
2611-
- 16、【强化】通用HTTP任务(httpJobHandler)强化,支持更丰富请求参数设置,完整参数示例如下:
2601+
- 5、【优化】报表统计SQL优化,修复小概率情况下查询null值问题;报表初始化SQL优化,修复小概率情况增改竞争问题;
2602+
- 6、【优化】任务回调失败日志读写磁盘逻辑优化,解决极端情况下大文件读写内存问题;
2603+
- 7、【重构】调度过期策略、调度类型策略逻辑重构,代码组件化拆分并完善日志,提升健壮性及可维护性;
2604+
- 8、【重构】任务调度中心底层组件重构,组件初始化以及销毁逻辑统一处理,任务触发及和回调逻辑优化,避免资源泄漏风险;
2605+
- 9、【重构】任务调度中心底层组件模块化拆分,移除组件单例以及静态代码逻辑,提升组件可维护性;
2606+
- 10、【修复】脚本任务process销毁逻辑优化,解决风险情况下脚本进程无法终止问题;
2607+
- 11、【修复】调度预读任务数量调整,改为调度线程池大小x10,降低事务颗粒度,提升性能及稳定性;
2608+
- 12、【修复】合并PR-2369,修复脚本任务参数取值问题;
2609+
- 13、【强化】通用HTTP任务(httpJobHandler)强化,支持更丰富请求参数设置,完整参数示例如下:
26122610
```
26132611
{
26142612
"url": "http://www.baidu.com",
@@ -2628,10 +2626,12 @@ public void execute() {
26282626
"auth": "auth data"
26292627
}
26302628
```
2631-
- 17、【ING】UI框架重构升级,提升交互体验;
2632-
- 18、【ING】调整资源加载逻辑,移除不必要的拦截器逻辑,提升页面加载效率;
2633-
- 19、【ING】规范API交互协议,通用响应结构体调整为Response;
2634-
- 20、【ING】Http通讯组件升级,基于接口代理方式重构;
2629+
- 14、【优化】调度组件日志完善,提升边界情况下问题定位效率;
2630+
- 15、【升级】升级多项maven依赖至较新版本,如 netty、groovy、spring、spring-ai、dify 等;
2631+
- 16、【ING】规范API交互协议,通用响应结构体调整为Response;
2632+
- 17、【ING】Http通讯组件升级,基于接口代理方式重构;
2633+
- 18、【ING】UI框架重构升级,提升交互体验;
2634+
- 19、【ING】调整资源加载逻辑,移除不必要的拦截器逻辑,提升页面加载效率;
26352635
26362636
26372637
### TODO LIST

xxl-job-admin/src/main/java/com/xxl/job/admin/mapper/XxlJobLogReportMapper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
@Mapper
1515
public interface XxlJobLogReportMapper {
1616

17-
public int save(XxlJobLogReport xxlJobLogReport);
17+
/*public int save(XxlJobLogReport xxlJobLogReport);
1818
19-
public int update(XxlJobLogReport xxlJobLogReport);
19+
public int update(XxlJobLogReport xxlJobLogReport);*/
20+
21+
public int saveOrUpdate(XxlJobLogReport xxlJobLogReport);
2022

2123
public List<XxlJobLogReport> queryLogReport(@Param("triggerDayFrom") Date triggerDayFrom,
2224
@Param("triggerDayTo") Date triggerDayTo);

xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobLogReportHelper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ public void run() {
7979
xxlJobLogReport.setFailCount(triggerDayCountFail);
8080
}
8181

82-
// do refresh
83-
int ret = XxlJobAdminBootstrap.getInstance().getXxlJobLogReportMapper().update(xxlJobLogReport);
84-
if (ret < 1) {
82+
// do refresh:
83+
XxlJobAdminBootstrap.getInstance().getXxlJobLogReportMapper().saveOrUpdate(xxlJobLogReport); // 0-fail; 1-save suc; 2-update suc;
84+
/*if (ret < 1) {
8585
XxlJobAdminBootstrap.getInstance().getXxlJobLogReportMapper().save(xxlJobLogReport);
86-
}
86+
}*/
8787
}
8888

8989
} catch (Throwable e) {

xxl-job-admin/src/main/resources/mapper/XxlJobLogReportMapper.xml

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
t.fail_count
2020
</sql>
2121

22-
<insert id="save" parameterType="com.xxl.job.admin.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
22+
<!--<insert id="save" parameterType="com.xxl.job.admin.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
2323
INSERT INTO xxl_job_log_report (
2424
`trigger_day`,
2525
`running_count`,
@@ -31,9 +31,9 @@
3131
#{sucCount},
3232
#{failCount}
3333
);
34-
<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
34+
&lt;!&ndash;<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
3535
SELECT LAST_INSERT_ID()
36-
</selectKey>-->
36+
</selectKey>&ndash;&gt;
3737
</insert>
3838
3939
<update id="update" >
@@ -42,7 +42,25 @@
4242
`suc_count` = #{sucCount},
4343
`fail_count` = #{failCount}
4444
WHERE `trigger_day` = #{triggerDay}
45-
</update>
45+
</update>-->
46+
47+
<insert id="saveOrUpdate" parameterType="com.xxl.job.admin.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
48+
INSERT INTO xxl_job_log_report (
49+
`trigger_day`,
50+
`running_count`,
51+
`suc_count`,
52+
`fail_count`
53+
) VALUES (
54+
#{triggerDay},
55+
#{runningCount},
56+
#{sucCount},
57+
#{failCount}
58+
)
59+
ON DUPLICATE KEY UPDATE
60+
`running_count` = #{runningCount},
61+
`suc_count` = #{sucCount},
62+
`fail_count` = #{failCount}
63+
</insert>
4664

4765
<select id="queryLogReport" resultMap="XxlJobLogReport">
4866
SELECT <include refid="Base_Column_List" />
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.xxl.job.admin.mapper;
2+
3+
import com.xxl.job.admin.model.XxlJobLogReport;
4+
import com.xxl.tool.core.DateTool;
5+
import jakarta.annotation.Resource;
6+
import org.junit.jupiter.api.Test;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.springframework.boot.test.context.SpringBootTest;
10+
11+
import java.util.Date;
12+
13+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
14+
public class XxlJobLogReportMapperTest {
15+
private static final Logger logger = LoggerFactory.getLogger(XxlJobLogMapperTest.class);
16+
17+
@Resource
18+
private XxlJobLogReportMapper xxlJobLogReportMapper;
19+
20+
@Test
21+
public void test(){
22+
23+
Date date = DateTool.parseDate("2025-10-01");
24+
25+
XxlJobLogReport xxlJobLogReport = new XxlJobLogReport();
26+
xxlJobLogReport.setTriggerDay(date);
27+
xxlJobLogReport.setRunningCount(444);
28+
xxlJobLogReport.setSucCount(555);
29+
xxlJobLogReport.setFailCount(666);
30+
31+
int ret = xxlJobLogReportMapper.saveOrUpdate(xxlJobLogReport);
32+
logger.info("ret:{}", ret);
33+
}
34+
}

0 commit comments

Comments
 (0)