在上一篇https://blog.csdn.net/shn1994/article/details/93873479

中,可以进行任务的动态配置,这样我们就可以把任务的名称(jobName),cron,分片数,个性化参数通过接口进行添加任务,或者配置在数据库中进行相应的操作。能进行了任务的动态添加,那如何进行任务的失效、生效和终止呢,答案在elastic-job-lite-console,可以参考控制台的源码。

看任务的临时失效、生效、终止主要是JobAPIService接口中的getJobOperatorAPI()这个方法,得到JobOperateAPI接口实现类的对象,JobOperateAPI接口如下

public interface JobOperateAPI {void trigger(Optional<String> var1, Optional<String> var2);void disable(Optional<String> var1, Optional<String> var2);void enable(Optional<String> var1, Optional<String> var2);void shutdown(Optional<String> var1, Optional<String> var2);void remove(Optional<String> var1, Optional<String> var2);
}

项目结构

实现类是JobOperateAPIImpl,接口JobOperateAPI在elastic-job-lite-lifecycle中

现在参考elastic-job-lite-console源码进行相应的改造

一:接着上一篇的项目继续,新加入elastic-job-lite-lifecycle的jar包,注意需要去掉里面的

jetty-all-server,否则项目会有错
     <dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-lifecycle</artifactId><exclusions><exclusion><groupId>org.eclipse.jetty.aggregate</groupId><artifactId>jetty-all-server</artifactId></exclusion></exclusions><version>${elastic-job.version}</version></dependency>
二:接口JobAPIService(从源码中参考)
package com.threejie.demo.service;import com.dangdang.ddframe.job.lite.lifecycle.api.*;public interface JobAPIService {//配置相关的JobSettingsAPI getJobSettingsAPI();//操作相关的JobOperateAPI getJobOperatorAPI();}

三:实现接口JobAPIService的类JobAPIServiceImpl

package com.threejie.demo.service.impl;import com.dangdang.ddframe.job.lite.lifecycle.api.*;
import com.google.common.base.Optional;
import com.threejie.demo.service.JobAPIService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;/*** 作业API服务实现类.* * @author zhangliang */
@Service
public/* final*/ class JobAPIServiceImpl implements JobAPIService {@Value("${regCenter.serverList}")private String connectString;@Value("${regCenter.namespace}")private String namespace;@Overridepublic JobSettingsAPI getJobSettingsAPI() {return JobAPIFactory.createJobSettingsAPI(connectString,namespace, Optional.fromNullable(null));}@Overridepublic JobOperateAPI getJobOperatorAPI() {return JobAPIFactory.createJobOperateAPI(connectString,namespace, Optional.fromNullable(null));}}

四:现在相应的接口进行相应的操作

package com.threejie.demo.controller;import com.dangdang.ddframe.job.lite.lifecycle.api.JobOperateAPI;
import com.google.common.base.Optional;
import com.threejie.demo.dynamic.AddJob;
import com.threejie.demo.jobs.DynamicJob;
import com.threejie.demo.service.JobAPIService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class JobController {@Autowiredprivate AddJob addJob;@Autowiredprivate JobAPIService JobAPIServiceImpl;/*** 添加任务* @param cron* @param jobName* @param shardingTotalCount* @param shardingItemParameters* @return*/@RequestMapping("/addJob")public String addJob(@RequestParam String cron,@RequestParam String jobName,@RequestParam Integer shardingTotalCount,@RequestParam String shardingItemParameters) {addJob.addjobs(jobName, new DynamicJob(), cron, shardingTotalCount, shardingItemParameters);return "0000";}/*** 失效* @param jobName* @return*/@RequestMapping("/disable")public String disable(@RequestParam String jobName){JobOperateAPI jobOperatorAPI = JobAPIServiceImpl.getJobOperatorAPI();jobOperatorAPI.disable(Optional.of(jobName), Optional.<String>absent());return "0000";}/*** 生效* @param jobName* @return*/@RequestMapping("/enable")public String enable(@RequestParam String jobName){JobOperateAPI jobOperatorAPI = JobAPIServiceImpl.getJobOperatorAPI();jobOperatorAPI.enable(Optional.of(jobName), Optional.<String>absent());return "0000";}/*** 对应控制台的终止的按钮,也就是下线的效果* @param jobName* @return*/@RequestMapping("/shutdown")public String shutdown(@RequestParam String jobName){JobOperateAPI jobOperatorAPI = JobAPIServiceImpl.getJobOperatorAPI();jobOperatorAPI.shutdown(Optional.of(jobName), Optional.<String>absent());return "0000";}/*** 进去看代码,这个会调用shutdown(jobName, serverIp)* @param jobName* @return*/@RequestMapping("/remove")public String remove(@RequestParam String jobName){JobOperateAPI jobOperatorAPI = JobAPIServiceImpl.getJobOperatorAPI();jobOperatorAPI.remove(Optional.of(jobName), Optional.<String>absent());return "0000";}/*** 触发* @param jobName* @return*/@RequestMapping("/trigger")public String trigger(@RequestParam String jobName){JobOperateAPI jobOperatorAPI = JobAPIServiceImpl.getJobOperatorAPI();jobOperatorAPI.enable(Optional.of(jobName), Optional.<String>absent());return "0000";}}

注意:enable 和disable之间可以相互转换,也就是控制台中的生效和失效。但是如果shutdown之后,状态就是已下线,只有重新调用添加任务的接口(注意调用哪台服务器上的哪台才会生效)才会可以进行disable和enable操作。shutdown就是下线任务。

可以通过elastic-job-lite-console源码自定义很多自己操作任务,比如

JobSettingsAPI进行相关配置的修改等等。这个和
JobOperateAPI修改类似,也有统计之类的,就不在赘述了。上面也是需求推动去寻求的解决方案。后面在发现elastic-job新的东西继续更新。欢迎交流

elastic-job:参考elastic-console在自己代码中实现任务的失效、生效、终止操作相关推荐

  1. html语言中空行标记,HTML代码中的空格和空行的实例操作

    代码中空格和空行的操作方法是怎样的?我们要在代码中标记换行符或者元素标记,才能被浏览器识别为空格或者空行,现在爱站技术频道就随爱站技术频道来看看HTML代码中的空格和空行的实例操作. 例子1:(文本内 ...

  2. Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(一)

    你对资产跟踪感兴趣吗? 好消息! 使用Elastic 地图应用可以轻松可视化和分析移动的数据. 你可以跟踪 IoT 设备的位置并监控运输途中的包裹或车辆. 在本教程中,你将查看来自俄勒冈州波特兰市的实 ...

  3. Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(二)

    这是继上一篇文章 "Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(一)" 的续篇.在上一篇文章中,我详细地介绍了如何从 Web 服务摄入实 ...

  4. JAVA中console方法怎么用_Java中Console对象实例代码

    Java中Console对象实例代码 发布于 2020-12-20| 复制链接 摘记: 在JDK 6中新增了java.io.Console类,可以让您取得字节为基础的主控台装置,例如,您可以藉由Sys ...

  5. [原创]桓泽学音频编解码(7):MP3 和 AAC 中huffman解码原理,优化设计与参考代码中实现...

    1 不同标准中的huffman解码原理 1.1标准MP3的huffman解码原理 在MP3即mpeg-1 audio标准中,无噪声编码模块的输入是一组576个己量化的频谱数据.无噪声编码首先对频谱进行 ...

  6. 霍尔Foc算法解析,代码 中颖单片机,3213 提供代码、电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考

    霍尔Foc算法解析,代码 中颖单片机,3213 提供代码.电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考-- 工程中坐标变换是库,算法是开源的,请知悉 :2910063 ...

  7. $.post请求的参数在后台代码中得到为null_996难得休息,小伙打开steam网页看了一款游戏,输入密码后却习惯性按了F12研究起了JS代码...

    登录后才能获取数据也是现在反爬的一个重点,本期我们来看看两种登录方式,分别参考豆瓣与steam,由于js代码过长,所以只截取了部分,完整代码移步 从今天开始种树​www.happyhong.cn ,直 ...

  8. 如何在 JS 代码中消灭 for 循环

    Edit: 在我入职上一家公司的第一天,看到代码库里面一堆的 for 循环,内心有些崩溃,于是做了一次技术分享,展示怎样在代码中避免 for 循环.这篇文章是那次分享的总结.至于为什么我提倡避免 fo ...

  9. 调用c++_WebAssembly: 在C代码中调用JS的函数

    0. 前提知识点 导出C中的函数给JS调用:主要是EMSCRIPTEN_KEEPALIVE这个Emscripten环境特有的宏. #include <stdio.h>#ifndef EM_ ...

最新文章

  1. PLSQL的 dynamic sql小例子
  2. Kafka-Monitor
  3. 常用事务代码 sap_SAP_PS_事务代码
  4. mysql自定义存储过程_MySQL自定义函数、触发器、存储过程
  5. srsLTE源码学习:RLC,无线链路控制子层抓包rlc_pcap.h,rlc_pcap.cc
  6. 连接服务器框架协议,想要实现:设备通过tcp连接服务器,框架用的是worker或者gateway...
  7. 【MyBatis笔记】日志
  8. 无约束优化问题的相关讨论
  9. Python面试必备!最全面的重点知识汇总,建议收藏!
  10. android手机主流屏幕大小,如何选择适合自己的手机屏幕大小 屏幕大小选择标准【详解】...
  11. 2022年的1024
  12. Ubuntu16.04 cp xorg.conf.failsafe xorg.conf后无法设置分辨率的解决办法
  13. cmd命令行常用指令
  14. 天天基金网高收益基金列表数据保存到Excle中#python爬虫小试牛刀之openpyxl
  15. 虚假评价检测(Spam Detection)最新工作综述
  16. python 期货现货差价监测_数字货币期货现货差价监控
  17. Linux之时区修改
  18. c++屏蔽Win10系统快捷键
  19. “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组.
  20. SICP读书笔记(5) —— Sec1.1.2-Sec1.1.3

热门文章

  1. Student学员数据库-[学生信息]、[学生成绩]表
  2. 系统入门到实战学习某项技术、有问题找“百度“、学习优秀的技术博客、找开源代码等资料
  3. 使用cmake安装nuget
  4. 如何在短期内通过PMP考试
  5. 网易笔试题:混合颜料
  6. Struts 2.0相关知识 摘自Struts2权威指南(李刚 著)
  7. Centos7制作openssh9.0rpm包与升级
  8. Motrix for Mac(全能高速下载工具)
  9. Mac下安装Tomcat7
  10. BP神经网络预测公路运力