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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM