zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java API 文档
    java容器
    java学习笔记 java.io.File类
    理解性能的奥秘——应用程序中慢,SSMS中快(1)——简介
    第六章——根据执行计划优化性能(3)——键值查找
    第六章——根据执行计划优化性能(2)——查找表/索引扫描
    第六章——根据执行计划优化性能(1)——理解哈希、合并、嵌套循环连接策略
    SQL Server 执行计划操作符详解(3)——计算标量(Compute Scalar)
    SQL Server 执行计划操作符详解(2)——串联(Concatenation )
    SQL Server 执行计划操作符详解(1)——断言(Assert)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/15220883.html
Copyright © 2011-2022 走看看