在上一篇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. 读书计划清单之碎碎念
  2. Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
  3. 抽屉远离在计算机的应用,抽屉原理的应用及其推广优秀毕业论文
  4. 1114. 按序打印
  5. html:(20):使用下拉框进行多选和使用提交按钮提交
  6. iOS开发CAAnimation详解
  7. VOIP侵蚀电信利益,未来最赚钱的行业.
  8. docker web程序本地化_想要成为前端Star 吗?一首歌时间将React / Vue 应用Docker 化...
  9. 解决Mac打开matlab编码问题
  10. 【随机数】深入理解random和srandom
  11. 解决办法:Centos 7 SSH连接超时自动断开
  12. atitit 部门日常工作流程体系 日常日程表 日常工作内容列表清单.docx
  13. micropython固件编译_Micropython编译固件的操作步骤
  14. idea自动化部署Alibaba Cloud Toolkit
  15. 【Multisim仿真】NE555组成的振荡器电路(占空比可调)
  16. 南京艺术学院计算机作曲,南京艺术学院932主科(上机操作计算机作曲应用)考研复习经验...
  17. 筑梦前行 向新而生 华云数据西北区域公司正式乔迁
  18. 【Numpy】用Python求解数独
  19. postgresql学习(一)
  20. 新机框ATCA配置过程(视图部分)

热门文章

  1. 硬盘分区出错提示磁盘结构损坏且无法读取怎么修复??
  2. 一些常用函数的拉普拉斯变换
  3. 3.SVN服务器与客户端基本使用
  4. C#与虚拟器 测试测量行业重磅推荐 SeeSharp Tools 介绍 - 1
  5. json数据的两种格式及两种json方法
  6. java与gis开发
  7. 嵌入和降维投影 数据集--fashion minst
  8. (八)Java算法:堆排序(详细图解)
  9. git统计历史上某一段时间代码的修改量
  10. C# 调用USB摄像头