一.介绍

项目中的调度任务可以使用Quartz任务调度框架

1、Job接口:这个接口里面只定义了一个方法,excute

void execute(JobExecutionContext context)  

然后定义一个类实现该接口,就可以定义自己需要执行的任务了,JobExecutionContext类提供调度上下文的各种信息

2、JobDetail:用于描叙Job实现类及其他的一些静态信息

3、Trigger:描叙触发Job执行的时间触发规则

4、Scheduler:运行容器,使用SchedulerFactory创建Scheduler实例

二.测试代码

1.测试代码一:

Hello.java

 import java.util.Date;

 import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println(String.format("Hello World! Time:%s", new Date()));
}
}

HelloWorldDeamo.java

 import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class HelloWorldDemo { public static void main(String[] args) {
try {
// 通过schedulerFactory获取一个调度器
SchedulerFactory schedulerfactory = new StdSchedulerFactory();
// 通过schedulerFactory获取一个调度器
Scheduler scheduler = schedulerfactory.getScheduler();
// 创建jobDetail实例,绑定Job实现类
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("helloJob", "jobGroup1").build();
// 定义调度触发规则,本例中使用SimpleScheduleBuilder创建了一个5s执行一次的触发器
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "triggerGroup1").startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
.build();
// 把作业和触发器注册到任务调度中
scheduler.scheduleJob(jobDetail, trigger);
// 启动调度
scheduler.start();
// 60s后关闭
Thread.sleep(1000 * 30);
scheduler.shutdown();
System.out.println("调度任务结束");
} catch (Exception e) {
e.printStackTrace();
}
}
}

2.另外一个程序(定义触发器和获得调取器和上面有所不同):

 import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory; /**
* 负责url调度
* 每天凌晨向url仓库中添加入口url
*/
public class UrlManager {
public static void main(String[] args){
try{
//获取默认调度器
Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
//开启调度器
defaultScheduler.start();
//任务
JobDetail jobDetail = new JobDetail("url_job",Scheduler.DEFAULT_GROUP,UrlJob.class);
//触发时间 凌晨一点 前三个参数是 秒 分 时
Trigger trigger = new CronTrigger("url_job", Scheduler.DEFAULT_GROUP,"0 0 1 * * ?");
//添加调度任务和触发时间
defaultScheduler.scheduleJob(jobDetail,trigger); }catch (Exception e){
e.printStackTrace();
}
}
}

3.测试代码二(对调度封装)

QuartzUtil.java

 import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 任务调度公共类
*/
public class QuartzUtil { private final static String JOB_GROUP_NAME = "QUARTZ_JOBGROUP_NAME";//任务组
private final static String TRIGGER_GROUP_NAME = "QUARTZ_TRIGGERGROUP_NAME";//触发器组
private static Logger log = LoggerFactory.getLogger(QuartzUtil.class);//日志 /**
* 添加任务的方法
* @param jobName 任务名
* @param triggerName 触发器名
* @param jobClass 执行任务的类
* @param seconds 间隔时间
* @throws SchedulerException
*/
public static void addJob(String jobName,String triggerName,Class<? extends Job> jobClass,int seconds) throws SchedulerException{
log.info("==================initialization=================");
//创建一个SchedulerFactory工厂实例
SchedulerFactory sf = new StdSchedulerFactory();
//通过SchedulerFactory构建Scheduler对象
Scheduler sche = sf.getScheduler();
log.info("===================initialize finshed==================="); log.info("==============add the Job to Scheduler=================="); //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
JobDetail jobDetail = JobBuilder.newJob(jobClass)
.withIdentity(jobName, JOB_GROUP_NAME)
.build();
//构建一个触发器,规定触发的规则
Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器
.withIdentity(triggerName, TRIGGER_GROUP_NAME)//给触发器起一个名字和组名
.startNow()//立即执行
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(seconds)//时间间隔 单位:秒
.repeatForever()//一直执行
)
.build();//产生触发器
//向Scheduler中添加job任务和trigger触发器
sche.scheduleJob(jobDetail, trigger);
//启动
sche.start();
} /**
* 测试
* @param args
*/
public static void main(String[] args) {
try {
//添加第一个任务 每隔10秒执行一次
QuartzUtil.addJob("job1", "trigger1", TestJobOne.class, 2); //添加第二个任务 每隔20秒执行一次
QuartzUtil.addJob("Job2", "trigger2", TestJobTwo.class, 5);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}

TestJobOne.java

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 实际执行任务的业务类,需要实现Job接口
*/
public class TestJobOne implements Job {
/**
* 执行任务的方法
*/
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("================执行任务一....");
//do more...这里可以执行其他需要执行的任务
}
}

TestJobTwo.java

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 实际执行任务的业务类,需要实现Job接口
*/
public class TestJobTwo implements Job {
/**
* 执行任务的方法
*/
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("================执行任务二....");
//do more...这里可以执行其他需要执行的任务
} }

Quartz的使用案例的更多相关文章

  1. C# -- Quartz.Net入门案例

    1. 入门案例 using Quartz;using Quartz.Impl; public class PrintTime : IJob { public Task Execute(IJobExec ...

  2. quartz(2) -- 入门案例

    第一步:添加jar,maven配置 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</g ...

  3. quartz定时任务表达式案例

    表示式 说明 "0 0 12 * * ? " 每天12点运行 "0 15 10 ? * *" 每天10:15运行 "0 15 10 * * ?&quo ...

  4. Quartz简单案例

    需求需要开发一个每天定时推送消息给微信用户,第一次接触quartz,简单案例 1. 先编辑要执行的任务 测试类代码 package com.wqq.test.quartz; import org.sp ...

  5. java框架---->quartz的使用(一)

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.今天我们就来学习一下它的使用,这里会分篇章对它进行介绍.只是希望能有个人,在我说没事的时候,知道我不 ...

  6. java定时任务实现的几种方式(Timer、Spring Task、Quartz)

    Timer JDK自带的Timer类,允许调度一个TimerTask任务. Demo: /** * Timer测试类 */ public class TimerDemo { public static ...

  7. Quartz.NET 作业调度(一):Test

    Quartz.NET 是一个开源的作业调度框架,是 Java 作业调度框架 Quartz 的.NET 版本,对于周期性的任务,其作业和触发器的结合,极大的简化了代码的编写,大多时候我们只需要关注作业本 ...

  8. SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)

    最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...

  9. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

随机推荐

  1. 《Java并发编程的艺术》并发编程的挑战(一)

    并发编程的挑战 并发编程的初衷是让程序运行的更快,但是更多的使用多线程真的会让程序变快吗? 1.线程上下文切换 关于线程上下文切换 多个线程在一个处理器里并不是同时进行的,而是非常快速地在线程之间进行 ...

  2. 最大熵与最大似然,以及KL距离。

    DNN中最常使用的离散数值优化目标,莫过于交差熵.两个分布p,q的交差熵,与KL距离实际上是同一回事. $-\sum plog(q)=D_{KL}(p\shortparallel q)-\sum pl ...

  3. dubbo入门学习 一SOA

    SOA是什么?SOA全英文是Service-Oriented Architecture,中文意思是中文面向服务编程,是一种思想,一种方法论,一种分布式的服务架构(具体可以百度). 用途:SOA解决多服 ...

  4. Python从入门到精通之Sixth!

    补充:enumerate 函数用于遍历序列(元组tuple.列表list.字典dict)中的元素以及它们的下标: >>> for i,j in enumerate(('a','b', ...

  5. 小白的CTF学习之路4——内存

    明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...

  6. Spring Boot的应用启动器

    Spring Boot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring- ...

  7. mybatis批量更新报错badsql

    mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...

  8. 直播流RTMP 知识

    分享直播相关知识点: http://blog.csdn.net/kingroc/article/details/50839994 #!/bin/bash# Order Finish Startup# ...

  9. Redis Sentinel 配置文件

    基础参考:https://www.cnblogs.com/wang-li/p/9955303.html 配置文件讲解 1.sentinel monitor # sentinel monitor < ...

  10. 2019年华南理工校赛(春季赛)--I--炒股(简单思维水题)

    水题,想想就过了 题目如下: 链接:https://ac.nowcoder.com/acm/contest/625/I来源:牛客网 攒机一时爽,一直攒机一直爽. 沉迷攒机的胡老师很快就发现,他每天只能 ...