Compare commits

...

10 Commits

Author SHA1 Message Date
aikai d438062486 分布式定时任务 2024-04-14 17:31:53 +08:00
xuxueli 761de38a0b update document 2024-01-20 05:01:16 +08:00
xuxueli c6a4df2a7b 调度日志页面XSS漏洞修复(ISSUE-3360)。 2024-01-20 04:58:10 +08:00
xuxueli 09d2a46245 update document 2024-01-20 03:34:43 +08:00
xuxueli f160e067cd 多个项目依赖升级至较新稳定版本,涉及netty、groovy、springboot、mybatis等; 2024-01-20 03:21:33 +08:00
许雪里 72963e4716
更新 XXL-JOB官方文档.md 2023-06-21 21:06:51 +08:00
xuxueli 6effc8b98f upgrade v2.4.1 2023-03-23 20:43:48 +08:00
xuxueli 0f867352fa 升级 v2.4.0 2023-03-23 19:53:18 +08:00
xuxueli 9293c61ca0 "CVE-2022-43183" SSRF漏洞修复。 2023-03-23 18:49:27 +08:00
xuxueli 730c1066b8 "CVE-2022-36157"授权漏洞修复。 2023-03-23 18:00:05 +08:00
19 changed files with 171 additions and 84 deletions

4
NOTICE
View File

@ -17,12 +17,12 @@ Netty:
* HOMEPAGE: * HOMEPAGE:
* https://github.com/netty/netty * https://github.com/netty/netty
Hessian: Mybatis:
* LICENSE: * LICENSE:
* http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0) * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
* HOMEPAGE: * HOMEPAGE:
* http://hessian.caucho.com * https://mybatis.org/mybatis-3/
SLF4J: SLF4J:

View File

@ -727,6 +727,45 @@ XXL-JOB是一个分布式任务调度平台其核心设计目标是开发迅
- 601、杭州海康机器人股份有限公司【海康】 - 601、杭州海康机器人股份有限公司【海康】
- 602、河南宸邦信息技术有限公司 - 602、河南宸邦信息技术有限公司
- 603、成都次元节点网络科技有限公司 - 603、成都次元节点网络科技有限公司
- 604、富士康科技集团【富士康】
- 605、青岛东软载波科技股份有限公司
- 606、小菊快跑科技有限公司
- 607、视源股份
- 608、宁波聚臻智能科技有限公司
- 609、阔天科技有限公司
- 610、网宿科技有限公司
- 611、南京梵鼎信息技术有限公司
- 612、房天下【房天下】
- 613、特瓦特能源科技有限公司
- 614、拓迪智能科技有限公司
- 615、东软集团【东软】
- 616、开普云
- 617、领课网络
- 618、南京特维软件有限公司
- 619、福建易联众保睿通信息科技有限公司
- 620、浙江核心同花顺金融科技有限公司【同花顺】
- 621、浙江博观瑞思科技有限公司
- 622、北京新美互通科技有限公司
- 623、北京有生博大软件股份有限公司
- 624、时代中国
- 625、鱼泡网
- 626、一粒方糖安徽科技有限公司
- 627、北京外研在线数字科技有限公司
- 628、德电中国通信技术有限公司
- 629、杭州寻联网络科技有限公司
- 630、橙联中国有限公司
- 631、北京承启通科技有限公司
- 632、银联数据服务有限公司【银联】
- 633、上海晶确科技有限公司
- 634、亚信科技有限公司
- 635、福建新航物联网科技有限公司
- 636、上扬软件
- 637、深蓝汽车科技有限公司
- 638、南昌节点汇智科技有限公司
- 639、锐明技术
- 640、再造再生健康科技有限公司
- 641、华宝证券
- 642、卓正医疗
- …… - ……
> 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。

View File

@ -697,6 +697,45 @@ XXL-JOB是一个分布式任务调度平台其核心设计目标是开发迅
- 601、杭州海康机器人股份有限公司【海康】 - 601、杭州海康机器人股份有限公司【海康】
- 602、河南宸邦信息技术有限公司 - 602、河南宸邦信息技术有限公司
- 603、成都次元节点网络科技有限公司 - 603、成都次元节点网络科技有限公司
- 604、富士康科技集团【富士康】
- 605、青岛东软载波科技股份有限公司
- 606、小菊快跑科技有限公司
- 607、视源股份
- 608、宁波聚臻智能科技有限公司
- 609、阔天科技有限公司
- 610、网宿科技有限公司
- 611、南京梵鼎信息技术有限公司
- 612、房天下【房天下】
- 613、特瓦特能源科技有限公司
- 614、拓迪智能科技有限公司
- 615、东软集团【东软】
- 616、开普云
- 617、领课网络
- 618、南京特维软件有限公司
- 619、福建易联众保睿通信息科技有限公司
- 620、浙江核心同花顺金融科技有限公司【同花顺】
- 621、浙江博观瑞思科技有限公司
- 622、北京新美互通科技有限公司
- 623、北京有生博大软件股份有限公司
- 624、时代中国
- 625、鱼泡网
- 626、一粒方糖安徽科技有限公司
- 627、北京外研在线数字科技有限公司
- 628、德电中国通信技术有限公司
- 629、杭州寻联网络科技有限公司
- 630、橙联中国有限公司
- 631、北京承启通科技有限公司
- 632、银联数据服务有限公司【银联】
- 633、上海晶确科技有限公司
- 634、亚信科技有限公司
- 635、福建新航物联网科技有限公司
- 636、上扬软件
- 637、深蓝汽车科技有限公司
- 638、南昌节点汇智科技有限公司
- 639、锐明技术
- 640、再造再生健康科技有限公司
- 641、华宝证券
- 642、卓正医疗
- …… - ……
> 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。 > 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。
@ -734,7 +773,7 @@ XXL-JOB是一个分布式任务调度平台其核心设计目标是开发迅
### 1.6 环境 ### 1.6 环境
- Maven3+ - Maven3+
- Jdk1.8+ - Jdk1.8+
- Mysql5.7+ - Mysql8.0+
## 二、快速入门 ## 二、快速入门
@ -1046,7 +1085,7 @@ Bean模式任务支持基于方法的开发方式每个任务对应一个
- 优点: - 优点:
- 每个任务只需要开发一个方法,并添加"@XxlJob"注解即可,更加方便、快速。 - 每个任务只需要开发一个方法,并添加"@XxlJob"注解即可,更加方便、快速。
- 支持自动扫描任务并注入到执行器容器。 - 支持自动扫描任务并注入到执行器容器。
- 缺点:要求Spring容器环境 - 缺点:略。
>基于方法开发的任务底层会生成JobHandler代理和基于类的方式一样任务也会以JobHandler的形式存在于执行器任务容器中。 >基于方法开发的任务底层会生成JobHandler代理和基于类的方式一样任务也会以JobHandler的形式存在于执行器任务容器中。
@ -2301,56 +2340,49 @@ public void execute() {
- 4、【优化】合并多项PR项目代码结构、健壮性优化PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、PR-2591。 - 4、【优化】合并多项PR项目代码结构、健壮性优化PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、PR-2591。
- 5、【优化】任务线程名优化提升可读性与问题定位效率(ISSUE-2527)。 - 5、【优化】任务线程名优化提升可读性与问题定位效率(ISSUE-2527)。
### 7.33 版本 v2.4.0 Release Notes[规划中] ### 7.33 版本 v2.4.0 Release Notes[2023-03-23]
- 1、【优化】执行器任务Bean扫描逻辑优化解决懒加载注解失效问题。 - 1、【优化】执行器任务Bean扫描逻辑优化解决懒加载注解失效问题。
- 2、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。 - 2、【优化】多个项目依赖升级至较新稳定版本涉及netty、groovy、spring、springboot、mybatis等
- 3、【修复】"CVE-2022-36157" 授权漏洞修复。
- 4、【修复】"CVE-2022-43183" SSRF漏洞修复。
### 7.34 版本 v2.4.1 Release Notes[规划中]
- 1、【优化】多个项目依赖升级至较新稳定版本涉及netty、groovy、springboot、mybatis等
- 2、【修复】"CVE-2022-43402" groovy低版本漏洞修复。
- 3、【修复】调度日志页面XSS漏洞修复(ISSUE-3360)。
- 4、[规划中]注册节点,弹框分页展示;解决注册节点过多时无法展示问题;
### TODO LIST
- 1、调度隔离调度中心针对不同执行器各自维护不同的调度和远程触发组件。
- 2、任务优先级调度与执行阶段按照优先级分配资源。
- 3、多数据库支持DAO层通过JPA实现不限制数据库类型。
- 4、执行器Log清理功能调度中心Log删除时同步删除执行器中的Log文件
- 5、性能优化任务、执行器数据全量本地缓存新增消息表广播通知
- 6、DAG流程任务
- 子任务:废弃
- DAG任务创建、管理DAG任务日志查看、操作
- 支持参数传递,共享数据;
- 分片任务:全部完成后才会出发后置节点;
- 配置并列的"a-b、b-c"路径列表构成串行、并行、dag任务流程"dagre-d3"绘图;任务依赖,流程图,子任务+会签任务,各节点日志;支持根据成功、失败选择分支;
- 7、任务标签方便搜索
- 8、告警增强
- 邮件告警:支持自定义标题、模板格式;
- webhook告警支持自定义告警URL、请求体格式
- 9、安全强化AccessToken动态生成、动态启停控制调度、回调
- 10、任务导入导出工具灵活支持版本升级、迁移等场景。
- 11、任务日志重构一次调度只记录一条主任务维护起止时间和状态。
- 普通任务:只记录一条主任务; - 普通任务:只记录一条主任务;
- 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上; - 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上;
- 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。 - 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。
- 3、【优化】[规划中]分片任务:全部完成后才会出发后置节点; - 12、分片任务全部完成后才会出发后置节点
### 7.34 新版本规划 [规划中]
- 1、[规划中]DAG流程任务
- DAG任务支持参数传递共享数据DAG任务创建、管理DAG任务日志查看、操作
- 子任务:废弃
- 2、[规划中]多数据库支持DAO层通过JPA实现不限制数据库类型
- 3、[规划中]告警增强:邮件告警 + webhook告警
- 4、[规划中]安全强化AccessToken动态生成、动态启停控制调度、回调
- 5、[规划中]任务导入导出工具,灵活支持版本升级、迁移等场景。
### TODO LIST
- 1、任务分片路由分片采用一致性Hash算法计算出尽量稳定的分片顺序即使注册机器存在波动也不会引起分批分片顺序大的波动目前采用IP自然排序可以满足需求待定
- 2、调度隔离调度中心针对不同执行器各自维护不同的调度和远程触发组件。
- 3、调度任务优先级
- 4、多数据库支持DAO层通过JPA实现不限制数据库类型
- 5、执行器Log清理功能调度中心Log删除时同步删除执行器中的Log文件
- 6、延时任务API触发支持"动态传参、延时消费";该功能与 XXL-MQ 冲突,该场景建议用后者;
- 7、调度线程池改为协程方式实现大幅降低系统内存消耗
- 8、任务、执行器数据全量本地缓存新增消息表广播通知
- 9、忙碌转移优化全部机器忙碌时不再直接失败
- 10、任务触发参数优化支持选择 "Cron触发"、"固定间隔时间触发"、"指定时间点触发"、"不选择" 等;
- 11、调度日志列表加上执行时长列并支持排序
- 12、DAG流程任务
- 替换子任务,支持参数传递,共享数据:
- 配置并列的"a-b、b-c"路径列表构成串行、并行、dag任务流程"dagre-d3"绘图;任务依赖,流程图,子任务+会签任务,各节点日志;支持根据成功、失败选择分支;
- 分片任务:全部完成后才会出发后置节点;
- 13、日期过滤支持多个时间段排除 - 13、日期过滤支持多个时间段排除
- 14、告警增强 - 13、GLUE 模式 Web Ide 版本对比功能;
- 邮件告警:支持自定义标题、模板格式; - 14、提供执行器Docker镜像
- webhook告警支持自定义告警URL、请求体格式 - 15、脚本任务支持数据参数新版本仅支持单参数不支持需要兼容
- 15、新增任务运行模式 "GLUE模式(GO) "支持GO任务 - 17、批量调度调度请求入queue调度线程批量获取调度请求并发起远程调度提高线程效率
- 16、GLUE 模式 Web Ide 版本对比功能; - 18、执行器端口复用复用容器端口提供通讯服务
- 17、注册中心优化实时性注册发现心跳注册间隔10srefresh失败则首次注册并立即更新注册信息心跳类似30s过期销毁 - 19、自定义失败重试时间间隔
- 18、提供执行器Docker镜像
- 19、脚本任务支持数据参数新版本仅支持单参数不支持需要兼容
- 20、批量调度调度请求入queue调度线程批量获取调度请求并发起远程调度提高线程效率
- 21、执行器端口复用复用容器端口提供通讯服务
- 22、分片任务全部成功后触发子任务
- 23、新增执行器描述属性任务名称属性
- 24、自定义失败重试时间间隔
- 25、任务标签方便搜索
- 26、执行器dag执行器不需要注册机器
## 八、其他 ## 八、其他

View File

@ -1,5 +1,5 @@
# #
# XXL-JOB v2.4.0-SNAPSHOT # XXL-JOB v2.4.1-SNAPSHOT
# Copyright (c) 2015-present, xuxueli. # Copyright (c) 2015-present, xuxueli.
CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;

24
pom.xml
View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.xuxueli</groupId> <groupId>com.xuxueli</groupId>
<artifactId>xxl-job</artifactId> <artifactId>xxl-job</artifactId>
<version>2.4.0-SNAPSHOT</version> <version>2.4.1-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>${project.artifactId}</name> <name>${project.artifactId}</name>
@ -24,24 +24,24 @@
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.target>1.8</maven.compiler.target>
<maven.test.skip>true</maven.test.skip> <maven.test.skip>true</maven.test.skip>
<netty.version>4.1.90.Final</netty.version> <netty.version>4.1.106.Final</netty.version>
<gson.version>2.10.1</gson.version> <gson.version>2.10.1</gson.version>
<spring.version>5.3.26</spring.version> <spring.version>5.3.31</spring.version>
<spring-boot.version>2.7.9</spring-boot.version> <spring-boot.version>2.7.18</spring-boot.version>
<mybatis-spring-boot-starter.version>2.3.0</mybatis-spring-boot-starter.version> <mybatis-spring-boot-starter.version>2.3.2</mybatis-spring-boot-starter.version>
<mysql-connector-j.version>8.0.32</mysql-connector-j.version> <mysql-connector-j.version>8.3.0</mysql-connector-j.version>
<slf4j-api.version>1.7.36</slf4j-api.version> <slf4j-api.version>2.0.11</slf4j-api.version>
<junit-jupiter.version>5.9.2</junit-jupiter.version> <junit-jupiter.version>5.10.1</junit-jupiter.version>
<javax.annotation-api.version>1.3.2</javax.annotation-api.version> <javax.annotation-api.version>1.3.2</javax.annotation-api.version>
<groovy.version>4.0.10</groovy.version> <groovy.version>4.0.18</groovy.version>
<maven-source-plugin.version>3.2.1</maven-source-plugin.version> <maven-source-plugin.version>3.3.0</maven-source-plugin.version>
<maven-javadoc-plugin.version>3.5.0</maven-javadoc-plugin.version> <maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
<maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version> <maven-gpg-plugin.version>3.1.0</maven-gpg-plugin.version>
</properties> </properties>
<build> <build>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.xuxueli</groupId> <groupId>com.xuxueli</groupId>
<artifactId>xxl-job</artifactId> <artifactId>xxl-job</artifactId>
<version>2.4.0-SNAPSHOT</version> <version>2.4.1-SNAPSHOT</version>
</parent> </parent>
<artifactId>xxl-job-admin</artifactId> <artifactId>xxl-job-admin</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@ -1,5 +1,6 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller;
import com.xxl.job.admin.controller.annotation.PermissionLimit;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.admin.core.model.XxlJobRegistry;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.core.util.I18nUtil;
@ -34,12 +35,14 @@ public class JobGroupController {
private XxlJobRegistryDao xxlJobRegistryDao; private XxlJobRegistryDao xxlJobRegistryDao;
@RequestMapping @RequestMapping
@PermissionLimit(adminuser = true)
public String index(Model model) { public String index(Model model) {
return "jobgroup/jobgroup.index"; return "jobgroup/jobgroup.index";
} }
@RequestMapping("/pageList") @RequestMapping("/pageList")
@ResponseBody @ResponseBody
@PermissionLimit(adminuser = true)
public Map<String, Object> pageList(HttpServletRequest request, public Map<String, Object> pageList(HttpServletRequest request,
@RequestParam(required = false, defaultValue = "0") int start, @RequestParam(required = false, defaultValue = "0") int start,
@RequestParam(required = false, defaultValue = "10") int length, @RequestParam(required = false, defaultValue = "10") int length,
@ -59,6 +62,7 @@ public class JobGroupController {
@RequestMapping("/save") @RequestMapping("/save")
@ResponseBody @ResponseBody
@PermissionLimit(adminuser = true)
public ReturnT<String> save(XxlJobGroup xxlJobGroup){ public ReturnT<String> save(XxlJobGroup xxlJobGroup){
// valid // valid
@ -102,6 +106,7 @@ public class JobGroupController {
@RequestMapping("/update") @RequestMapping("/update")
@ResponseBody @ResponseBody
@PermissionLimit(adminuser = true)
public ReturnT<String> update(XxlJobGroup xxlJobGroup){ public ReturnT<String> update(XxlJobGroup xxlJobGroup){
// valid // valid
if (xxlJobGroup.getAppname()==null || xxlJobGroup.getAppname().trim().length()==0) { if (xxlJobGroup.getAppname()==null || xxlJobGroup.getAppname().trim().length()==0) {
@ -170,6 +175,7 @@ public class JobGroupController {
@RequestMapping("/remove") @RequestMapping("/remove")
@ResponseBody @ResponseBody
@PermissionLimit(adminuser = true)
public ReturnT<String> remove(int id){ public ReturnT<String> remove(int id){
// valid // valid
@ -189,6 +195,7 @@ public class JobGroupController {
@RequestMapping("/loadById") @RequestMapping("/loadById")
@ResponseBody @ResponseBody
@PermissionLimit(adminuser = true)
public ReturnT<XxlJobGroup> loadById(int id){ public ReturnT<XxlJobGroup> loadById(int id){
XxlJobGroup jobGroup = xxlJobGroupDao.load(id); XxlJobGroup jobGroup = xxlJobGroupDao.load(id);
return jobGroup!=null?new ReturnT<XxlJobGroup>(jobGroup):new ReturnT<XxlJobGroup>(ReturnT.FAIL_CODE, null); return jobGroup!=null?new ReturnT<XxlJobGroup>(jobGroup):new ReturnT<XxlJobGroup>(ReturnT.FAIL_CODE, null);

View File

@ -1,7 +1,7 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller;
import com.xxl.job.admin.core.exception.XxlJobException;
import com.xxl.job.admin.core.complete.XxlJobCompleter; import com.xxl.job.admin.core.complete.XxlJobCompleter;
import com.xxl.job.admin.core.exception.XxlJobException;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.model.XxlJobLog;
@ -20,9 +20,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.util.HtmlUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -129,27 +131,38 @@ public class JobLogController {
model.addAttribute("triggerCode", jobLog.getTriggerCode()); model.addAttribute("triggerCode", jobLog.getTriggerCode());
model.addAttribute("handleCode", jobLog.getHandleCode()); model.addAttribute("handleCode", jobLog.getHandleCode());
model.addAttribute("executorAddress", jobLog.getExecutorAddress());
model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
model.addAttribute("logId", jobLog.getId()); model.addAttribute("logId", jobLog.getId());
return "joblog/joblog.detail"; return "joblog/joblog.detail";
} }
@RequestMapping("/logDetailCat") @RequestMapping("/logDetailCat")
@ResponseBody @ResponseBody
public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum){ public ReturnT<LogResult> logDetailCat(long logId, int fromLineNum){
try { try {
ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(executorAddress); // valid
ReturnT<LogResult> logResult = executorBiz.log(new LogParam(triggerTime, logId, fromLineNum)); XxlJobLog jobLog = xxlJobLogDao.load(logId); // todo, need to improve performance
if (jobLog == null) {
return new ReturnT<LogResult>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid"));
}
// log cat
ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress());
ReturnT<LogResult> logResult = executorBiz.log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum));
// is end // is end
if (logResult.getContent()!=null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) { if (logResult.getContent()!=null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
XxlJobLog jobLog = xxlJobLogDao.load(logId);
if (jobLog.getHandleCode() > 0) { if (jobLog.getHandleCode() > 0) {
logResult.getContent().setEnd(true); logResult.getContent().setEnd(true);
} }
} }
// fix xss
if (logResult.getContent()!=null && StringUtils.hasText(logResult.getContent().getLogContent())) {
String newLogContent = logResult.getContent().getLogContent();
newLogContent = HtmlUtils.htmlEscape(newLogContent, "UTF-8");
logResult.getContent().setLogContent(newLogContent);
}
return logResult; return logResult;
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);

View File

@ -1,5 +1,5 @@
### web ### web
server.port=8080 server.port=9090
server.servlet.context-path=/xxl-job-admin server.servlet.context-path=/xxl-job-admin
### actuator ### actuator
@ -25,7 +25,7 @@ mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
### xxl-job, datasource ### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password=root_pwd spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### datasource-pool ### datasource-pool

View File

@ -1,6 +1,6 @@
admin_name=Scheduling Center admin_name=Scheduling Center
admin_name_full=Distributed Task Scheduling Platform XXL-JOB admin_name_full=Distributed Task Scheduling Platform XXL-JOB
admin_version=2.4.0-SNAPSHOT admin_version=2.4.1-SNAPSHOT
admin_i18n=en admin_i18n=en
## system ## system

View File

@ -1,6 +1,6 @@
admin_name=任务调度中心 admin_name=任务调度中心
admin_name_full=分布式任务调度平台XXL-JOB admin_name_full=分布式任务调度平台XXL-JOB
admin_version=2.4.0-SNAPSHOT admin_version=2.4.1-SNAPSHOT
admin_i18n= admin_i18n=
## system ## system

View File

@ -1,6 +1,6 @@
admin_name=任務調度中心 admin_name=任務調度中心
admin_name_full=分布式任務調度平臺XXL-JOB admin_name_full=分布式任務調度平臺XXL-JOB
admin_version=2.4.0-SNAPSHOT admin_version=2.4.1-SNAPSHOT
admin_i18n= admin_i18n=
## system ## system

View File

@ -2,7 +2,7 @@
<configuration debug="false" scan="true" scanPeriod="1 seconds"> <configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName> <contextName>logback</contextName>
<property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/> <property name="log.path" value="./xxl-job/xxl-job-admin.log"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder>

View File

@ -25,8 +25,6 @@ $(function() {
async: false, // sync, make log ordered async: false, // sync, make log ordered
url : base_url + '/joblog/logDetailCat', url : base_url + '/joblog/logDetailCat',
data : { data : {
"executorAddress":executorAddress,
"triggerTime":triggerTime,
"logId":logId, "logId":logId,
"fromLineNum":fromLineNum "fromLineNum":fromLineNum
}, },

View File

@ -62,8 +62,6 @@
// 参数 // 参数
var triggerCode = '${triggerCode}'; var triggerCode = '${triggerCode}';
var handleCode = '${handleCode}'; var handleCode = '${handleCode}';
var executorAddress = '${executorAddress!}';
var triggerTime = '${triggerTime?c}';
var logId = '${logId}'; var logId = '${logId}';
</script> </script>
<script src="${request.contextPath}/static/js/joblog.detail.1.js"></script> <script src="${request.contextPath}/static/js/joblog.detail.1.js"></script>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.xuxueli</groupId> <groupId>com.xuxueli</groupId>
<artifactId>xxl-job</artifactId> <artifactId>xxl-job</artifactId>
<version>2.4.0-SNAPSHOT</version> <version>2.4.1-SNAPSHOT</version>
</parent> </parent>
<artifactId>xxl-job-core</artifactId> <artifactId>xxl-job-core</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.xuxueli</groupId> <groupId>com.xuxueli</groupId>
<artifactId>xxl-job</artifactId> <artifactId>xxl-job</artifactId>
<version>2.4.0-SNAPSHOT</version> <version>2.4.1-SNAPSHOT</version>
</parent> </parent>
<artifactId>xxl-job-executor-samples</artifactId> <artifactId>xxl-job-executor-samples</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.xuxueli</groupId> <groupId>com.xuxueli</groupId>
<artifactId>xxl-job-executor-samples</artifactId> <artifactId>xxl-job-executor-samples</artifactId>
<version>2.4.0-SNAPSHOT</version> <version>2.4.1-SNAPSHOT</version>
</parent> </parent>
<artifactId>xxl-job-executor-sample-frameless</artifactId> <artifactId>xxl-job-executor-sample-frameless</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.xuxueli</groupId> <groupId>com.xuxueli</groupId>
<artifactId>xxl-job-executor-samples</artifactId> <artifactId>xxl-job-executor-samples</artifactId>
<version>2.4.0-SNAPSHOT</version> <version>2.4.1-SNAPSHOT</version>
</parent> </parent>
<artifactId>xxl-job-executor-sample-springboot</artifactId> <artifactId>xxl-job-executor-sample-springboot</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>