xxljob 基于api 添加job
目前官方没有直接提供类似执行器那种能力,如果需要动态创建job 有几种解决方法
解决方法
- 修改官方的admin 代码暴露类似admin 的能力
- 基于官方web的api 进行操作
- 直接基于数据库操作(可行,而且更加简单)
以下说明基于官方的web api 的操作说明
参考代码
就有okhttp3,操作流程,获取cookie,添加cookie 请求接口
package com.dalong;
import com.xxl.job.core.biz.model.ReturnT;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
public class XxlJobApi {
public static OkHttpClient client(){
OkHttpClient client =new OkHttpClient().newBuilder().build();
return client;
}
public static ReturnT<String> submitJob() {
OkHttpClient client = client();
/**
*
jobGroup: 1
jobDesc: sss
author: ssss
alarmEmail:
scheduleType: FIX_RATE
scheduleConf: 111
cronGen_display:
schedule_conf_CRON:
schedule_conf_FIX_RATE: 111
schedule_conf_FIX_DELAY:
glueType: BEAN
executorHandler: demoJobHandler
executorParam:
executorRouteStrategy: FIRST
childJobId:
misfireStrategy: DO_NOTHING
executorBlockStrategy: SERIAL_EXECUTION
executorTimeout: 0
executorFailRetryCount: 0
glueRemark: GLUE代码初始化
glueSource:
*/
// 基于map 包装formbody, 这样我们的数据是可以直接存储在db中的(mongo是一个不错的选择)
Map<String,String> info = new HashMap<>();
info.put("jobGroup","1");
info.put("jobDesc","demo");
info.put("cronGen_display","");
info.put("glueType","BEAN");
info.put("executorHandler","demoJobHandler");
info.put("author","dalong");
info.put("executorRouteStrategy","FIRST");
info.put("triggerStatus","1");
info.put("misfireStrategy","DO_NOTHING");
info.put("executorBlockStrategy","SERIAL_EXECUTION");
info.put("scheduleType","FIX_RATE");
info.put("scheduleConf","11");
FormBody.Builder builder = new FormBody.Builder();
info.entrySet().forEach(new Consumer<Map.Entry<String, String>>() {
@Override
public void accept(Map.Entry<String, String> stringStringEntry) {
builder.add(stringStringEntry.getKey(),stringStringEntry.getValue());
}
});
try {
FormBody formBody2 = new FormBody.Builder()
.add("userName", "<user>")
.add("password", "<password>")
.build();
Request request= new Request.Builder().post(formBody2).url("http://localhost/xxl-job-admin/login").build();
Response response= client.newCall(request).execute();
String token = response.header("Set-Cookie");
// 首先获取token 基于cookie
// 然后请求头附带cookie进行操作
Request request2= new Request.Builder().addHeader("Cookie",token).post(builder.build()).url("http://localhost/xxl-job-admin/jobinfo/add").build();
Response response2= client.newCall(request2).execute();
return new ReturnT<>(response2.body().string());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
说明
以上代码是基于okhttp3包装的请求处理,改造官方的代码也是一个不错的选择,因为官方目前暴露的一些能力不是特别方便
直接进行数据库的操作也是一个不错的选择(亲测可行),我们直接使用jdbc 进行包装操作就可以了(直接复用官方的mybatis代码就可以了)
参考资料
https://square.github.io/okhttp/
https://www.xuxueli.com/xxl-job
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-09-02 haproxy 2.0 dataplaneapi rest api 转为graphql docker 镜像
2019-09-02 haproxy 2.0 dataplaneapi rest api 转为graphql
2019-09-02 haproxy 2.0 dataplaneapi rest api 几个方便的问题排查接口
2018-09-02 vulcanjs 包类型
2018-09-02 vulcanjs schemas&& collections
2018-09-02 vulcanjs 核心架构概念
2018-09-02 vulcanjs 开源工具方便快速开发react graphql meteor 应用