首页 > 编程语言 >Quartz_简单编程式任务调度使用(SimpleTrigger)

Quartz_简单编程式任务调度使用(SimpleTrigger)

时间:2022-11-25 17:05:18浏览次数:35  
标签:触发器 Quartz 作业 SimpleTrigger import org 任务调度 quartz



  最近在工作中,要做定时任务的更能,最开始的时候,想到的是 JavaSE 中,自带 Timer 及 TimerTask 联合使用,完成定时任务。最后发现,随着业务的复杂,JDK 中的 Timer 和 TimerTask 并不能简单、灵活的完成定时任务的操作。于是,便学习了任务调度框架-- Quartz。在最初的学习中,网上的例子大多数是基于 quartz-2.0.0 之前的版本,但是发现,2.0.0之前的版本和 2.0.0之后的变化还是比较大的,网上给出的例子及方法,都不适用了。最后,在学习了 quartz-2.1.7 之后,大致了解了下相关的方法。现分享出来,以供学习。

  首先是自定义自己的作业类,然后是开始任务调度操作。具体的使用方法,如下代码:

(1)自定义的作业类





/** 0.0.0.1 */

package com.gaoqing.common.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
* 自定义作业类
* @author 高青
* 2014-3-23
*/
public class MyJob implements Job{

/**
* 2014-3-23
*/
public MyJob() {

}

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {

//得到当前作业的名称
String jobName = context.getJobDetail().getJobDataMap().getString("name");

System.out.println(
"当前作业开始执行了,作业的名称为:" + jobName +
",作业的时间是:" + new SimpleDateFormat("yyyy-MM-dd").format(new Date())
);
}

}




作业类中的逻辑就是,取出任务调度器中注册的 JobDetail 的名称。

(2)具体的任务调度操作如下:




/** 0.0.0.1 */

package com.gaoqing.common.quartz;

import java.util.Date;

import org.apache.log4j.Logger;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

/**
* 简单任务调度测试类
* @author 高青
* 2014-3-20
*/
public class SimpleQuartzTest{

/** 日志对象 */
private static Logger log = Logger.getLogger(SimpleQuartzTest.class);

/**
* 2014-3-20
*/
public SimpleQuartzTest() {

}

/**
* 主线程方法
* author 高青
* 2014-3-20
* @param args 参数字符串集
* @return void 空
* @throws SchedulerException 调度器异常
*/
public static void main(String[] args) throws SchedulerException {

//得到一个默认的调度器
Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();

//得到具体的和指定作业相关的 JobDetail 对象
JobDetail jobDetail = JobBuilder.              //2.0.0之后,JobDetail 变成了接口,不能用之前的 new JobDetail()来实例了,现在要通过相应的作业建造器来管理生成
newJob(MyJob.class).
withIdentity("myFirstJob", "firstJob").
build();              //要调用建造器的 build()方法,才能实例当前作业的具体作业对象

//得到作业的参数对象
JobDataMap jobDataMap = jobDetail.getJobDataMap();   //可以向作业数据对象中,存放自己需要的数据,在自己实现的 Job 类中,可以通过 context 得到相应的参数,以便做业务处理
jobDataMap.put("myFirstJob", "first");
jobDataMap.put("name", "myFirstJob");

//实例化触发器对象(定义执行的时间和执行的周期)
SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger(). //同上,触发器的也需要相应的建造器来实例化触发器,现在的 Trigger 也是接口,不能通过 new Trigger() 来实例化了
withIdentity(TriggerKey.triggerKey("myFirstTigger", "myFirstGroup")).
withSchedule(                       //在得到对应的 SimpleTrigger 时,需要通过触发器建造器的 widthSchedule()方法,建造对应的触发器
SimpleScheduleBuilder.
simpleSchedule().
repeatForever().
withIntervalInSeconds(5)
).
startAt(new Date()).
build();

//添加调度作业(将具体的作业和触发器添加到作业中)
defaultScheduler.scheduleJob(jobDetail, simpleTrigger);

//执行调度任务
defaultScheduler.start();
}
}




  上面就是一个简单的任务调度的实现,和之前的版本相比,变化还是挺大了,个人感觉后面的版本更强调了性能和多任务处理。本文主要旨在实用,并不讲解大量的理论,理论在网上都是可以搜到的。希望自己的一点点分享,能对他人有一点点的帮助。下一篇,将写一个简单的任务调度实例,使用更能强大的 CronTrigger 触发器来实现任务调度功能。

  

标签:触发器,Quartz,作业,SimpleTrigger,import,org,任务调度,quartz
From: https://blog.51cto.com/u_15834343/5887042

相关文章

  • SpringBoot整合Quartz
    1.Quartz1.1.Quartz简介Quartz是OpenSymphony开源组织在JobScheduling领域又一个开源项目,是完全由Java开发的一个开源任务日程管理系统,“任务进度管理器”就......
  • 分布式任务调度平台xxl-job
    1、概念官方地址中文版:http://www.xuxueli.com/xxl-job源码仓库地址:http://gitee.com/xuxueli0323/xxl-job什么是xxl-job?​XXL-JOB是一个轻量级分布式任务调度平......
  • 一文学会线程池、任务调度的使用
    一文学会线程池、任务调度的使用本文主要讲解线程池以及定时任务的使用,以及在分布式环境下、JUC线程池和Spring线程池的弊端。起因:分布式换环境下的定时任务问题❓......
  • .net 分布式架构之任务调度平台
    .net简单任务调度平台,用于.netdll,exe的任务的挂载,任务的隔离,调度执行,访问权限控制,监控,管理,日志,错误预警,性能分析等。.net任务调度平台用于.net......
  • .net 任务调度平台
    .net简单任务调度平台,用于.netdll,exe的任务的挂载,任务的隔离,调度执行,访问权限控制,监控,管理,日志,错误预警,性能分析等。.net任务调度平台用于.net......
  • 621.任务调度器
    给你一个用字符数组 tasks 表示的CPU需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在1个单位时间内执行完。......
  • 【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@Distribu
    背景介绍很多小伙伴们都跟我留言说过一个类似的问题,就是针对于任务调度框架而言的选取,很多公司都会采用任务调度框架的鼻祖Quartz,那么我们来梳理以下Java领域的任务调度框架......
  • Quartz.NET--JOB作业
    作业流程是在调度器的统一调度下完成的,它可以调度多个作业,触发器提供作业执行的条件(每天8:00am),触发器与作业关联,它们是1:N的关系,1个触发器可以关联1个或多个作业。附带......
  • Quartz-定时任务框架
    一、新建.NETFramework4控制台应用程序 ConsoleApP40二、选择ConsoleApP40右键管理NuGet程序包(N)... 输入 Quartz(为了测试方便请选择2.5.0版本)  添......
  • 自动化运维?看看Python怎样完成自动任务调度⛵
    ......