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. jackon - com.fasterxml.jackson.databind.exc.InvalidDefinitionException && UnrecognizedPropertyException: Unrecognized field 异常

    在用jackson解析json数据是碰到的问题 1.首先是InvalidDefinitionException 测试发现可能是目标类中无无参数构造方法导致异常. 添加无参构造方法后发现前一个异常解决但 ...

  2. java开发面试大全刷题整理

    题目源自Java团长公众号,内容个人整理,来源于各大博客,未经允许,不准摘抄,仅供分享,不做商业使用. 本分享多数为浅层知识体系,更为底层的还请自行多写写代码,若有不对之处,望广大的人才指点,不喜勿喷 ...

  3. AE的Annotation学习摘记

    http://xg-357.blog.163.com/blog/static/36263124201151763512894/ IFeatureWorkspaceAnno pFWSAnno = (IF ...

  4. 3.将maven项目jar纳入maven仓库,Mave项目依赖另外一个Maven项目的案例

     1 若想让maven项目依赖另外一个maven项目.被依赖的项目要在maven仓库中有对应的jar包,所以要对依赖的项目运行mvninstall命令. 2 新建第二个项目模块HelloFrien ...

  5. Memcache应用场景介绍

    面临的问题 对于高并发高訪问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序执行离崩溃的边 ...

  6. 我的家乡:三河古镇已经登上央视CCTV-1新闻联播啦!

    在烟雨朦胧时走在古镇的青石街上,别有一番风味!第一幅图为央视的直播车,第二副图为漂亮的三河夜景色!

  7. grep命令最经常使用的功能总结

    1. grep最简单的用法,匹配一个词:grep word filename 2. 能够从多个文件里匹配:grep word filename1 filenam2 filename3 3. 能够使用正 ...

  8. [办公自动化]EXCEL不大,但是保存很慢

    今天同事有一个excel文件.office 2007格式的. 折腾了半天.按照以往的经验,定位-对象,应该可以删除. 后来在“编辑”窗格的“查找和选择”里面,单击“选择窗格“.可以看到很多”pictu ...

  9. 优化tomcat配置(从内存、并发、缓存)优化

    一.Tomcat内存优化 ** Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数. JAVA_O ...

  10. Java数据类型的分类

    java支持的类型分为两类:基本类型和引用类型 一.基本类型 4类8种: (1)整型:int.short.long.byte. (2)浮点型:float.double. (3)字符型:char. (4 ...