支持宕机自动恢复触发一次性或周期性任务执行的组件包首次介绍-easyTask
easyTask介绍
- 一个方便触发一次性或周期性任务执行的工具包,支持海量,高并发,高可用,宕机自动恢复任务
使用场景
- 需要精确到秒的某一时刻触发任务执行。比如订单交易完成24小时后如果客户未评价,则系统自动给出评价。
- 需要周期性的执行某个任务。比如每天下午6点,提醒员工下班关机。
特性
- 使用简单
- 秒级精度任务执行计划
- 支持海量任务提交执行
- 支持高并发执行任务
- 支持任务持久化,宕机自动恢复任务计划
- 支持自定义线程池、任务持久化保存路径
架构
开始使用
- pom添加引用
<dependency>
<groupId>com.github.liuche51</groupId>
<artifactId>easyTask</artifactId>
<version>1.0.1</version>
</dependency>
- 定义好您要执行的任务类 Define the task class you want to perform
public class CusTask1 extends Schedule implements Runnable {
private static Logger log = LoggerFactory.getLogger(CusTask1.class); @Override
public void run() {
Map<String, String> param = getParam();
if (param != null && param.size() > 0)
log.info("任务1已执行!姓名:{} 生日:{} 年龄:{} 线程ID:{}", param.get("name"), param.get("birthday"), param.get("age"),param.get("threadid")); }
}
- 简单应用示例代码 Simply apply the sample code
public class Main {
private static Logger log = LoggerFactory.getLogger(Main.class);
private static AnnularQueue annularQueue=AnnularQueue.getInstance();
private static Object obj=new Object();
public static void main(String[] args){
allcustomSimpleSetTest();
}
static void allcustomSimpleSetTest(){
try {
annularQueue.start();
CusTask1 task1 = new CusTask1();
task1.setEndTimestamp(ZonedDateTime.now().plusSeconds(10).toInstant().toEpochMilli());
Map<String,String> param=new HashMap<String,String>(){
{
put("name","刘彻");
put("birthday","1988-1-1");
put("age","25");
put("threadid",String.valueOf(Thread.currentThread().getId()));
}
};
task1.setParam(param);
CusTask1 task2 = new CusTask1();
task2.setPeriod(30);
task2.setImmediateExecute(true);
task2.setTaskType(TaskType.PERIOD);
task2.setUnit(TimeUnit.SECONDS);
Map<String,String> param2=new HashMap<String,String>(){
{
put("name","Jack");
put("birthday","1986-1-1");
put("age","32");
put("threadid",String.valueOf(Thread.currentThread().getId()));
}
};
task2.setParam(param2);
annularQueue.submit(task1);
annularQueue.submit(task2);
obj.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
注意
- 此构件已在Windows和centos下做了适当测试,目前未在生产环境中使用过
- 为了更好的保证系统故障自动恢复任务,请自定义程序任务持久化文件保存的路径(不同应用文件路径定义不同为好,以免被其他应用覆盖),并确保读写权限。如果以 jar包运行,文件默认在同级目录;如果以war包在tomcat下运行,文件默认在tomcat的bin目录下。
- 如果您在使用过程中遇到问题,可以在这里提交
支持宕机自动恢复触发一次性或周期性任务执行的组件包首次介绍-easyTask的更多相关文章
- HBase RegionServer宕机处理恢复
本文分析RegionServer宕机后这个region server上的region是如何在其他region server上恢复的. region server宕机后发生了什么 HMaster有一 ...
- 假如Kafka集群中一个broker宕机无法恢复,应该如何处理?
假如Kafka集群中一个broker宕机无法恢复, 应该如何处理? 今天面试时遇到这个问题, 网上资料说添加新的broker, 是不会自动同步旧数据的. 笨办法 环境介绍 三个broker的集群, z ...
- keepalived+nginx实现niginx高可用,宕机自动重启
nginx作为http服务器,在集群中 用于接受客户单发送过来的请求,并且根据配置的策略将请求 转发给具体的哪台服务器 如果在nginx服务器使用轮询策略处理客户端的请求,出现了tomcat 宕机的情 ...
- 一次修改数据库物理文件造成Mysql宕机的恢复记录
事件起始 某夜,我正在床上冥想准备入睡,忽然同事向我求救:消息内容如下: Oh My Gold 改了些配置,啥都没了!都没了!没了!了! 我仔细询问,原来是她因为某些原因将某库的物理文件夹改名后,发现 ...
- tomcat宕机自动重启脚本
#!/bin/bash# 获取tomcat进程ID /usr/share/tomcatTomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat'|grep -v ...
- mysql group replication 主节点宕机恢复
一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...
- clickhouse高可用-节点宕机数据一致性方案-热扩容
1. 集群节点及服务分配 说明: 1.1. 在每个节点上启动两个clickhouse服务(后面会详细介绍如何操作这一步),一个数据分片,一个数据备份,为了确保宕机数据一致性,数据分片和数据备份不能同一 ...
- [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)
星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...
- Redis生产环境节点宕机问题报错及恢复排错
Redis故障发现 主观下线 当cluster-node-timeout时间内某节点无法与另一个节点顺利完成ping消息通信时,则将该节点标记为主观下线状态. 客观下线 当某个节点判断另一个节点主观下 ...
随机推荐
- 个人网站开发***云服务器+Linux+域名***
作为一个改变世界的程序猿,我们不应该只会埋头写程序修bug还得会点别的, 当然如果要是自己搞个网站玩玩,既可以锻炼技术,没事也可以和圈外的朋友吹吹 牛.因为水平有限,就弄一些最基础的看看喽,不喜勿喷. ...
- MySQL错误日志、binlog日志、查询日志、慢查询日志简介
1.数据库的日志是帮助数据库管理员,追踪分析数据库曾经发生的各种事件的有力依据,mysql中提供了错误日志.binlog日志(二进制日志).查处日志.慢查询日志.在此,我力求解决以下问题:各个日志的作 ...
- HNU 12834 Thread Tree
递归输出即可了 #include<bits/stdc++.h> using namespace std; struct tree{ int dot; string s; } ...
- E. Dreamoon and Strings(Codeforces Round #272)
E. Dreamoon and Strings time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Selenium系列之--04 常见元素操作总结
一.Selenium总共有八种定位方法 By.id() 通过id定位 By.name() 通过name 定位 By.xpath() 通过xpath定位 By.className() 通过clas ...
- MongoDB 自己定义函数
定义 db.system.js.insert({ _id : "TestConcat", value : function TestConcat(s1, s2){ return s ...
- 通过通过url routing解决UIViewController跳转依赖
XYRouter https://github.com/uxyheaven/XYRouter XYRouter是一个通过url routing来解决UIViewController跳转依赖的类. * ...
- UIButton的图片和文字相对位置调整
通常.假设直接设置UIButton的图片和文字,默认的两者相对位置可能不是我们想要的,那么须要进行调整. 须要用到的函数例如以下: UIEdgeInsetsMake(CGFloat top, CGFl ...
- 3 TypeScript 语法特性
一.类型注解(Type annotations) TypeScript 通过类型注解提供静态类型以在编译时启动类型检查,简单来说,就是指定数据类型,它会在代码运行的时候,对传入的数据进行数据类型匹配检 ...
- 1 Angular 2 简介与 AngularJS 1.x 历史对比
Angular 2 是一款JavaScript的开源框架,用于协助单一页面应用程序运行.Angular 2 是 AngularJS 1.x 的升级版本,应Web的进化和前端开发的变革还有从Angula ...