elastic-job:参考elastic-console在自己代码中实现任务的失效、生效、终止操作
在上一篇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在自己代码中实现任务的失效、生效、终止操作相关推荐
- html语言中空行标记,HTML代码中的空格和空行的实例操作
代码中空格和空行的操作方法是怎样的?我们要在代码中标记换行符或者元素标记,才能被浏览器识别为空格或者空行,现在爱站技术频道就随爱站技术频道来看看HTML代码中的空格和空行的实例操作. 例子1:(文本内 ...
- Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(一)
你对资产跟踪感兴趣吗? 好消息! 使用Elastic 地图应用可以轻松可视化和分析移动的数据. 你可以跟踪 IoT 设备的位置并监控运输途中的包裹或车辆. 在本教程中,你将查看来自俄勒冈州波特兰市的实 ...
- Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(二)
这是继上一篇文章 "Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(一)" 的续篇.在上一篇文章中,我详细地介绍了如何从 Web 服务摄入实 ...
- JAVA中console方法怎么用_Java中Console对象实例代码
Java中Console对象实例代码 发布于 2020-12-20| 复制链接 摘记: 在JDK 6中新增了java.io.Console类,可以让您取得字节为基础的主控台装置,例如,您可以藉由Sys ...
- [原创]桓泽学音频编解码(7):MP3 和 AAC 中huffman解码原理,优化设计与参考代码中实现...
1 不同标准中的huffman解码原理 1.1标准MP3的huffman解码原理 在MP3即mpeg-1 audio标准中,无噪声编码模块的输入是一组576个己量化的频谱数据.无噪声编码首先对频谱进行 ...
- 霍尔Foc算法解析,代码 中颖单片机,3213 提供代码、电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考
霍尔Foc算法解析,代码 中颖单片机,3213 提供代码.电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考-- 工程中坐标变换是库,算法是开源的,请知悉 :2910063 ...
- $.post请求的参数在后台代码中得到为null_996难得休息,小伙打开steam网页看了一款游戏,输入密码后却习惯性按了F12研究起了JS代码...
登录后才能获取数据也是现在反爬的一个重点,本期我们来看看两种登录方式,分别参考豆瓣与steam,由于js代码过长,所以只截取了部分,完整代码移步 从今天开始种树www.happyhong.cn ,直 ...
- 如何在 JS 代码中消灭 for 循环
Edit: 在我入职上一家公司的第一天,看到代码库里面一堆的 for 循环,内心有些崩溃,于是做了一次技术分享,展示怎样在代码中避免 for 循环.这篇文章是那次分享的总结.至于为什么我提倡避免 fo ...
- 调用c++_WebAssembly: 在C代码中调用JS的函数
0. 前提知识点 导出C中的函数给JS调用:主要是EMSCRIPTEN_KEEPALIVE这个Emscripten环境特有的宏. #include <stdio.h>#ifndef EM_ ...
最新文章
- 读书计划清单之碎碎念
- Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
- 抽屉远离在计算机的应用,抽屉原理的应用及其推广优秀毕业论文
- 1114. 按序打印
- html:(20):使用下拉框进行多选和使用提交按钮提交
- iOS开发CAAnimation详解
- VOIP侵蚀电信利益,未来最赚钱的行业.
- docker web程序本地化_想要成为前端Star 吗?一首歌时间将React / Vue 应用Docker 化...
- 解决Mac打开matlab编码问题
- 【随机数】深入理解random和srandom
- 解决办法:Centos 7 SSH连接超时自动断开
- atitit 部门日常工作流程体系 日常日程表 日常工作内容列表清单.docx
- micropython固件编译_Micropython编译固件的操作步骤
- idea自动化部署Alibaba Cloud Toolkit
- 【Multisim仿真】NE555组成的振荡器电路(占空比可调)
- 南京艺术学院计算机作曲,南京艺术学院932主科(上机操作计算机作曲应用)考研复习经验...
- 筑梦前行 向新而生 华云数据西北区域公司正式乔迁
- 【Numpy】用Python求解数独
- postgresql学习(一)
- 新机框ATCA配置过程(视图部分)