老项目用的xxl-job 2.2

一、2.2.0 版本官方支持情况

核心事实
XXL-Job 在 2.3.0 之前未提供官方管理客户端,2.2.0 版本需直接调用其 REST API 进行任务管理。但可通过以下方案实现:


二、2.2.0 兼容方案

方案 1:直接 HTTP API 调用(推荐)
// 1. 登录认证获取Cookie
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost loginRequest = new HttpPost("http://xxl-job-admin:8080/xxl-job-admin/login");
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("userName", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
loginRequest.setEntity(new UrlEncodedFormEntity(params));

try (CloseableHttpResponse response = httpClient.execute(loginRequest)) {
    // 保存Cookie用于后续请求
    String cookie = response.getFirstHeader("Set-Cookie").getValue();
  
    // 2. 创建任务
    HttpPost createRequest = new HttpPost("http://xxl-job-admin:8080/xxl-job-admin/jobinfo/add");
    createRequest.setHeader("Cookie", cookie);
  
    JSONObject jobJson = new JSONObject();
    jobJson.put("jobGroup", 2);            // 执行器ID
    jobJson.put("jobDesc", "数据备份任务");
    jobJson.put("scheduleType", "CRON");
    jobJson.put("scheduleConf", "0 0 2 * * ?");
    jobJson.put("glueType", "BEAN");
    jobJson.put("executorHandler", "backupHandler");
    jobJson.put("author", "DBA");
  
    createRequest.setEntity(new StringEntity(jobJson.toString(), ContentType.APPLICATION_JSON));
    httpClient.execute(createRequest);  // 创建任务
  
    // 3. 删除任务 (需要jobId)
    HttpPost deleteRequest = new HttpPost("http://xxl-job-admin:8080/xxl-job-admin/jobinfo/remove");
    deleteRequest.setHeader("Cookie", cookie);
    List<NameValuePair> delParams = new ArrayList<>();
    delParams.add(new BasicNameValuePair("id", "123")); // 任务ID
    deleteRequest.setEntity(new UrlEncodedFormEntity(delParams));
    httpClient.execute(deleteRequest);
}
方案 2:封装简易客户端
public class XxlJobClientV2 {
    private final String adminUrl;
    private String authCookie;

    public XxlJobClientV2(String adminUrl, String username, String password) throws IOException {
        this.adminUrl = adminUrl;
        this.authCookie = login(username, password);
    }
  
    private String login(String user, String pass) throws IOException {
        // 登录逻辑(同方案1)
        return "XXL_JOB_LOGIN_IDENTITY=..."; 
    }
  
    public int createJob(JobInfo job) throws IOException {
        HttpPost request = new HttpPost(adminUrl + "/jobinfo/add");
        request.setHeader("Cookie", authCookie);
        // 设置JSON参数...
        return parseJobIdFromResponse(executeRequest(request));
    }
  
    public void deleteJob(int jobId) throws IOException {
        HttpPost request = new HttpPost(adminUrl + "/jobinfo/remove");
        request.setHeader("Cookie", authCookie);
        request.setEntity(new UrlEncodedFormEntity(
            Collections.singletonList(new BasicNameValuePair("id", String.valueOf(jobId)))
        );
        executeRequest(request);
    }
  
    // 其他操作封装...
}

三、2.2.0 核心 API 列表

功能方法路径参数格式
登录POST/loginform-urlencoded
添加任务POST/jobinfo/addJSON
更新任务POST/jobinfo/updateJSON
删除任务POST/jobinfo/removeform-urlencoded
启动任务POST/jobinfo/startform-urlencoded
停止任务POST/jobinfo/stopform-urlencoded
触发执行POST/jobinfo/triggerform-urlencoded
任务列表POST/jobinfo/pageListJSON
执行日志POST/joblog/pageListJSON

四、关键参数说明(2.2.0)

任务创建 JSON 结构:
{
  "jobGroup": 2,                 // 执行器ID(必填)
  "jobDesc": "订单超时处理",      // 任务描述
  "scheduleType": "CRON",        // 调度类型: CRON/FIX_RATE
  "scheduleConf": "0 0/5 * * * ?", // cron表达式
  "glueType": "BEAN",            // 模式: BEAN/GLUE_GROOVY等
  "executorHandler": "orderTimeoutHandler", // Bean模式标识
  "executorParam": "",           // 任务参数
  "executorRouteStrategy": "FIRST", // 路由策略
  "misfireStrategy": "DO_NOTHING", // 调度过期策略
  "author": "TechTeam",          // 负责人
  "alarmEmail": "alert@company.com" // 报警邮箱
}
分页查询参数:
{
  "start": 0,                    // 起始位置
  "length": 10,                  // 每页数量
  "jobGroup": 2,                 // 执行器ID
  "triggerStatus": -1,           // 状态: -1=全部, 0=停止, 1=运行
  "jobDesc": "",                 // 任务描述过滤
  "executorHandler": ""          // 执行器Handler过滤
}

五、2.2.0 特有注意事项

  1. Cookie 有效期问题
       2.2.0 会话有效期固定 30 分钟,需实现会话刷新:
       java    // 每次请求前检查会话    if (isSessionExpired()) {        this.authCookie = login(username, password);    }    

  2. 参数差异
       相比 2.4.0,2.2.0 缺少以下字段:
       - glueUpdatetime (GLUE更新时间)
       - childJobId (子任务ID)
       - executorTimeout (任务超时时间)

  3. 执行器注册方式
       2.2.0 需要手动在管理界面添加执行器,不支持自动注册


六、升级建议

如果条件允许,强烈建议升级到 2.4.0+,主要优势:

+ 官方管理客户端支持
+ 动态执行器注册
+ OpenAPI 安全认证
+ 更完善的监控指标
+ 任务分片广播优化
- 需要兼容旧任务配置

版本迁移提示
如同将蒸汽机车升级为高铁 - 2.2.0 如同可靠的蒸汽动力系统,能完成基本运输;而 2.4.0+ 则是现代化高速铁路,提供更强大的调度能力和安全保障。迁移时需注意:

  1. 备份 /data/applogs/xxl-job/ 目录
  2. 逐条验证旧任务配置
  3. 使用 xxl-job-migration-tool 进行配置转移
  4. 新版本采用 accessToken 替代基础认证
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值