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的更多相关文章

  1. HBase RegionServer宕机处理恢复

    本文分析RegionServer宕机后这个region server上的region是如何在其他region server上恢复的. region server宕机后发生了什么   HMaster有一 ...

  2. 假如Kafka集群中一个broker宕机无法恢复,应该如何处理?

    假如Kafka集群中一个broker宕机无法恢复, 应该如何处理? 今天面试时遇到这个问题, 网上资料说添加新的broker, 是不会自动同步旧数据的. 笨办法 环境介绍 三个broker的集群, z ...

  3. keepalived+nginx实现niginx高可用,宕机自动重启

    nginx作为http服务器,在集群中 用于接受客户单发送过来的请求,并且根据配置的策略将请求 转发给具体的哪台服务器 如果在nginx服务器使用轮询策略处理客户端的请求,出现了tomcat 宕机的情 ...

  4. 一次修改数据库物理文件造成Mysql宕机的恢复记录

    事件起始 某夜,我正在床上冥想准备入睡,忽然同事向我求救:消息内容如下: Oh My Gold 改了些配置,啥都没了!都没了!没了!了! 我仔细询问,原来是她因为某些原因将某库的物理文件夹改名后,发现 ...

  5. tomcat宕机自动重启脚本

    #!/bin/bash# 获取tomcat进程ID /usr/share/tomcatTomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat'|grep -v ...

  6. mysql group replication 主节点宕机恢复

    一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...

  7. clickhouse高可用-节点宕机数据一致性方案-热扩容

    1. 集群节点及服务分配 说明: 1.1. 在每个节点上启动两个clickhouse服务(后面会详细介绍如何操作这一步),一个数据分片,一个数据备份,为了确保宕机数据一致性,数据分片和数据备份不能同一 ...

  8. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

  9. Redis生产环境节点宕机问题报错及恢复排错

    Redis故障发现 主观下线 当cluster-node-timeout时间内某节点无法与另一个节点顺利完成ping消息通信时,则将该节点标记为主观下线状态. 客观下线 当某个节点判断另一个节点主观下 ...

随机推荐

  1. python学习之---- paramiko 模块

    paramiko 模块 功能:提供了ssh及sftp进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1  基于用户名和密码的 sshclient 方式登录 ...

  2. B. Restaurant--cf579B (贪心)

    http://codeforces.com/problemset/problem/597/B 把右节点从小到大排序  在跑一遍就行了 #include <iostream> #includ ...

  3. ArrayList和LinkedList区别(蚂蚁金服面试题)

    1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylist 底层使用的是Object数组:LinkedLis ...

  4. BZOJ 1055 HAOI2008 玩具取名 动态规划

    题目大意:给定一个由'W','I','N','G'构成的字符串.给定一些规则.这些规则能够将两个字符合成为一个,比如"II"能够合成为'W',"WW"能够合成为 ...

  5. MySQL基础笔记(一) SQL简介+数据类型

    MySQL是一个关系型数据库管理系统(RDBMS),它是当前最流行的 RDBMS 之一.MySQL分为社区版和企业版,由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发 ...

  6. 跟面试官讲Binder(零)

    面试的时候,面试官问你说,简单说一下Android的Binder机制,你会怎么回答? 我想,我会这么说. 在Android启动的时候,Zygote进程孵化出第一个子进程叫SystemServer,而在 ...

  7. 一个IM开源项目LiteTalk

    http://blog.csdn.net/visualwind/article/details/6086631 http://blog.sina.com.cn/s/blog_54b5ea250101n ...

  8. Oracle11g表空间导入dmp数据

    如果你的表数据没有附带表空间和用户名,那么只要一句话 Imp {u_name}/{u_pwd}@{local_svrname} fromuser={from_user} touser={u_name} ...

  9. Django创建数据表

    Django中创建表. 用的django项目自带的sqlite数据库,创建完毕后将表注冊到jdango.admin,就能够在浏览器在管理了. 在django项目的models.py文件里: from  ...

  10. [LeetCode]Two Sum 【Vector全局指针的使用】

    无序数组返回两个元素和为给定值的下标. tricks:无序.返回下标增序.返回的是原始数组的下标. vector<int>*pa; bool cmp(int x,int y){ retur ...