Quartz的使用案例
一.介绍
项目中的调度任务可以使用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的使用案例的更多相关文章
- C# -- Quartz.Net入门案例
1. 入门案例 using Quartz;using Quartz.Impl; public class PrintTime : IJob { public Task Execute(IJobExec ...
- quartz(2) -- 入门案例
第一步:添加jar,maven配置 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</g ...
- quartz定时任务表达式案例
表示式 说明 "0 0 12 * * ? " 每天12点运行 "0 15 10 ? * *" 每天10:15运行 "0 15 10 * * ?&quo ...
- Quartz简单案例
需求需要开发一个每天定时推送消息给微信用户,第一次接触quartz,简单案例 1. 先编辑要执行的任务 测试类代码 package com.wqq.test.quartz; import org.sp ...
- java框架---->quartz的使用(一)
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.今天我们就来学习一下它的使用,这里会分篇章对它进行介绍.只是希望能有个人,在我说没事的时候,知道我不 ...
- java定时任务实现的几种方式(Timer、Spring Task、Quartz)
Timer JDK自带的Timer类,允许调度一个TimerTask任务. Demo: /** * Timer测试类 */ public class TimerDemo { public static ...
- Quartz.NET 作业调度(一):Test
Quartz.NET 是一个开源的作业调度框架,是 Java 作业调度框架 Quartz 的.NET 版本,对于周期性的任务,其作业和触发器的结合,极大的简化了代码的编写,大多时候我们只需要关注作业本 ...
- SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)
最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...
- Quartz应用实践入门案例二(基于java工程)
在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...
随机推荐
- BUAAOO第二单元多线程电梯作业总结
第二单元多线程作业需要保证线程安全
- Linux 下 Samba 服务器搭建
初学,分享 环境和条件--- 虚拟机:VMware虚拟机 系统:Linux ubuntu 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:0 ...
- <taglib>报错
问题:web.xml中<taglib>报错 2.3版本可以直接卸载<web-app>中 2.4及之后放在<jsp-config>中 <jsp-config&g ...
- 第四次Scrum编码冲刺!!!!
一.总体任务: 本次冲刺是完成对图书馆管理系统的最后三个功能的实现------管理员对用户授权.用户注销和用户查询 二.个人任务及完成情况: 本人本次的任务是实现对管理员对用户授权部分的界面与部 ...
- 2019.03.28 bzoj3326: [Scoi2013]数数(数位dp)
传送门 题意: 一个人数数,规则如下: 确定数数的进制B 确定一个数数的区间[L, R] 对于[L, R] 间的每一个数,把该数视为一个字符串,列出该字符串的所有连续子串对应的B进制数的值. 对所有列 ...
- shell遍历文件夹
遍历目录下的所有文件 假如有一个文件夹路径为dir,遍历文件 for file in /path/dir/* do if test -f $file then echo $file arrary=($ ...
- redis_哈希对象
redis哈希对象的底层编码有两种:ziplist.hashtable ziplist编码 当一个哈希键只包含少量kv对.且key和value都是小整数值.短字符串时,redis会使用压缩列表来做 z ...
- 跨域资源共享(CROS)
跨域资源共享(CROS) 同源策略(Same Origin Policy, SOP) 同源策略允许运行在页面的脚本可以无限制的访问同一个网站(同源)中其他脚本的任何方法和属性.当不同网站页面(非同源) ...
- 解决windows server在关闭远程桌面后开启的服务也随之关闭的问题
首先远程登录服务器,关闭所有tomcat进程以及所有java进程,使用 netstat命令检查tomcat端口是否仍在监听状态,如仍在监听,使用taskkill杀死进程, 接下来关闭系统tomcat服 ...
- outlook VSTO
https://files.cnblogs.com/files/maooveyu/OutlookPhotoSync.rar