Java任务调度框架Quartz教程实例
来源:互联网 发布:html5跑酷游戏源码 编辑:程序博客网 时间:2024/05/01 16:08
参考链接:http://blog.csdn.net/yuebinghaoyuan/article/details/9045471
参考链接:http://blog.csdn.net/hu1991die/article/details/44565029
核心概念
Quartz核心的概念:scheduler任务调度、Job任务、Trigger触发器、JobDetail任务细节
Job任务:其实Job是接口,其中只有一个execute方法:
package org.quartz;
public abstract interface Job{
public abstract void execute(JobExecutionContext paramJobExecutionContext)
throws JobExecutionException;
}
我们开发者只要实现此接口,实现execute方法即可。把我们想做的事情,在execute中执行即可。
JobDetail:任务细节,Quartz执行Job时,需要新建个Job实例,但是不能直接操作Job类,所以通过JobDetail来获取Job的名称、描述信息。
Trigger触发器:执行任务的规则;比如每天,每小时等。
一般情况使用SimpleTrigger,和CronTrigger,这个触发器实现了Trigger接口。
对于复杂的时间表达式来说,比如每个月15日上午几点几分,使用CronTrigger
对于简单的时间来说,比如每天执行几次,使用SimpleTrigger
scheduler任务调度:是最核心的概念,需要把JobDetail和Trigger注册到scheduler中,才可以执行。
具体实例1 :
QuartzUtil
package com.eastcom.first.spark.data.quartz;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();}}
TestJobOne
package com.eastcom.first.spark.data.quartz;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class TestJobOne implements Job {/** * 执行任务的方法 */public void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("================执行任务一....");// do more...这里可以执行其他需要执行的任务}}
TestJobTwo
package com.eastcom.first.spark.data.quartz;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class TestJobTwo implements Job {/** * 执行任务的方法 */public void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("================执行任务二....");// do more...这里可以执行其他需要执行的任务}}
QuartzClient
package com.eastcom.first.spark.data.quartz;import org.quartz.SchedulerException;public class QuartzClient {/** * 测试 * * @param args */public static void main(String[] args) {try {// 添加第一个任务 每隔2秒执行一次QuartzUtil.addJob("job1", "trigger1", TestJobOne.class, 2);// 添加第二个任务 每隔5秒执行一次QuartzUtil.addJob("Job2", "trigger2", TestJobTwo.class, 5);} catch (SchedulerException e) {e.printStackTrace();}}}
运行结果
INFO | Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' INFO | Quartz scheduler version: 2.3.0 INFO | ===================initialize finshed=================== INFO | ==============add the Job to Scheduler================== INFO | Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. INFO | ==================initialization================= INFO | ===================initialize finshed=================== INFO | ==============add the Job to Scheduler================== INFO | Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.================执行任务二....================执行任务一....================执行任务一....================执行任务一....================执行任务二....================执行任务一....================执行任务一....
QuartzUtil2
package com.eastcom.first.spark.data.quartz;import org.quartz.CronScheduleBuilder;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.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class QuartzUtil2 {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(QuartzUtil2.class);// 日志/** * 添加任务的方法 * * @param jobName * 任务名 * @param triggerName * 触发器名 * @param jobClass * 执行任务的类 * @param seconds * 间隔时间 * @throws SchedulerException */public static void addJob(String jobName, String triggerName, Class<? extends Job> jobClass, String cronExpression)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)// 给触发器起一个名字和组名.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).startNow()// 立即执行.build();// 产生触发器// 向Scheduler中添加job任务和trigger触发器sche.scheduleJob(jobDetail, trigger);// 启动sche.start();}}
QuartzClient2
package com.eastcom.first.spark.data.quartz;import org.quartz.SchedulerException;public class QuartzClient2 {/** * 测试 * * @param args */public static void main(String[] args) {try {String cronExpression1 = "0-55/5 * * * * ? *";// 添加第一个任务 每隔5秒执行一次QuartzUtil2.addJob("job1", "trigger1", TestJobOne.class, cronExpression1);// 添加第二个任务 每隔10秒执行一次String cronExpression2 = "0-50/10 * * * * ? *";QuartzUtil2.addJob("Job2", "trigger2", TestJobTwo.class, cronExpression2);} catch (SchedulerException e) {e.printStackTrace();}}}
运行结果:
SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/org/apache/activemq/activemq-all/5.15.0/activemq-all-5.15.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] INFO | ==================initialization================= INFO | Using default implementation for ThreadExecutor INFO | Job execution threads will use class loader of thread: main INFO | Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl INFO | Quartz Scheduler v.2.3.0 created. INFO | RAMJobStore initialized. INFO | Scheduler meta-data: Quartz Scheduler (v2.3.0) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. INFO | Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' INFO | Quartz scheduler version: 2.3.0 INFO | ===================initialize finshed=================== INFO | ==============add the Job to Scheduler================== INFO | Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. INFO | ==================initialization================= INFO | ===================initialize finshed=================== INFO | ==============add the Job to Scheduler================== INFO | Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.================执行任务一....================执行任务一....================执行任务二....
over
阅读全文
0 0
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- Java任务调度框架Quartz教程实例
- 任务调度框架Quartz实例
- Java任务调度框架Quartz
- Java任务调度框架Quartz
- Java任务调度框架Quartz
- Spring配置Quartz任务调度框架教程
- Spring配置Quartz任务调度框架教程
- Spring配置Quartz任务调度框架教程
- Spring配置Quartz任务调度框架教程
- java计划任务调度框架quartz结合spring实现调度的配置实例代码分享
- tomcat进Manager 403 Access Denied You are not authorized to view this page
- Android学习总结 :自定义 View(一)
- 关于单例模式中线程同步的方法(同步块和同步方法)
- Knight Moves POJ
- 中央再次对房地产市场作出指示 持续稳定推进调控
- Java任务调度框架Quartz教程实例
- Unity3D_界面透传单击事件处理
- 如何判定一个APP页面是原生开发还是H5页面
- mitmproxy的使用
- PCL 的更新版本
- 关于CSS的杂项(常用项)
- docker安装ubuntu
- Scala学习
- 修改rsyncd.conf无需重启rysnc服务