easyTask介绍
- 一个方便触发一次性或周期性任务执行的工具包,支持海量,高并发,高可用,宕机自动恢复任务
使用场景
- 需要精确到秒的某一时刻触发任务执行。比如订单交易完成24小时后如果客户未评价,则系统自动给出评价。
- 需要周期性的执行某个任务。比如每天下午6点,提醒员工下班关机。
特性
- 使用简单
- 秒级精度任务执行计划
- 支持海量任务提交执行
- 支持高并发执行任务
- 支持任务持久化,宕机自动恢复任务计划
- 支持自定义线程池、任务持久化保存路径
架构
![](https://img2018.cnblogs.com/blog/371129/201906/371129-20190605184118303-2003115609.jpg)
开始使用
<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目录下。
- 如果您在使用过程中遇到问题,可以在这里提交