任务调度开源框架石英动态添加,修改和删除定时任务
Quartz是个开源的作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听,作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听.Quartz允许开发人员根据时间间隔(或天)来调度作业。
它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了Quartz的应用程序可以重用来自不同事件的作业,还可以作为一个事件组合多个作业。并且还能和Spring配置整合使用.Quartz在功能上远远超越了JDK自带的Timer,很好很强大好啦,直接上代码!
- / **
- * @说明:
- *
- * @Title:QuartzManager.java
- * @包com.joyce.quartz
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:15:52
- * @version V2.0
- * /
- 包 com.joyce.quartz;
- import org.quartz.CronTrigger;
- import org.quartz.JobDetail;
- 进口 org.quartz.Scheduler;
- import org.quartz.SchedulerFactory;
- import org.quartz.impl.StdSchedulerFactory;
- / **
- * @Description:定时任务管理类
- *
- * @ClassName:QuartzManager
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:15:52
- * @version V2.0
- * /
- 公共类 QuartzManager {
- private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
- 私人静态 字符串JOB_GROUP_NAME = “EXTJWEB_JOBGROUP_NAME” ;
- 私人静态 字符串TRIGGER_GROUP_NAME = “EXTJWEB_TRIGGERGROUP_NAME” ;
- / **
- * @Description:添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
- *
- * @参数jobName
- *任务名
- * @参数cls
- *任务
- * @参数时间
- *时间设置,参考石英说明文档
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:47:44
- * @version V2.0
- * /
- @SuppressWarnings (“unchecked” )
- public static void addJob(String jobName,Class cls,String time){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- JobDetail jobDetail = 新的 JobDetail(jobName,JOB_GROUP_NAME,cls); //任务名,任务组,任务执行类
- //触发器
- CronTrigger触发器= 新的 CronTrigger(jobName,TRIGGER_GROUP_NAME); //触发器名,触发器组
- trigger.setCronExpression(时间); //触发器时间设定
- sched.scheduleJob(jobDetail,触发器);
- //启动
- 如果 (!sched.isShutdown()){
- sched.start();
- }
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- / **
- * @Description:添加一个定时任务
- *
- * @参数jobName
- *任务名
- * @参数jobGroupName
- *任务组名
- * @参数triggerName
- *触发器名
- * @参数triggerGroupName
- *触发器组名
- * @param jobClass
- *任务
- * @参数时间
- *时间设置,参考石英说明文档
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:48:15
- * @version V2.0
- * /
- @SuppressWarnings (“unchecked” )
- public static void addJob(String jobName,String jobGroupName,
- 字符串triggerName,字符串triggerGroupName,类jobClass,
- 字符串时间){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- JobDetail jobDetail = 新的 JobDetail(jobName,jobGroupName,jobClass); //任务名,任务组,任务执行类
- //触发器
- CronTrigger trigger = new CronTrigger(triggerName,triggerGroupName); //触发器名,触发器组
- trigger.setCronExpression(时间); //触发器时间设定
- sched.scheduleJob(jobDetail,触发器);
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- / **
- * @Description:修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
- *
- * @参数jobName
- * @参数时间
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:49:21
- * @version V2.0
- * /
- @SuppressWarnings (“unchecked” )
- public static void modifyJobTime(String jobName,String time){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- CronTrigger触发器=(CronTrigger)sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
- if (trigger == null ){
- 返回;
- }
- String oldTime = trigger.getCronExpression();
- if (!oldTime.equalsIgnoreCase(time)){
- JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME);
- Class objJobClass = jobDetail.getJobClass();
- removeJob(JOBNAME);
- addJob(jobName,objJobClass,time);
- }
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- / **
- * @Description:修改一个任务的触发时间
- *
- * @参数triggerName
- * @参数triggerGroupName
- * @参数时间
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:49:37
- * @version V2.0
- * /
- public static void modifyJobTime(String triggerName,
- 字符串triggerGroupName,字符串时间){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- CronTrigger触发=(CronTrigger)sched.getTrigger(triggerName,triggerGroupName);
- if (trigger == null ){
- 返回;
- }
- String oldTime = trigger.getCronExpression();
- if (!oldTime.equalsIgnoreCase(time)){
- CronTrigger ct =(CronTrigger)触发器;
- //修改时间
- ct.setCronExpression(时间);
- //重启触发器
- sched.resumeTrigger(triggerName,triggerGroupName);
- }
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- / **
- * @Description:移除一个任务(使用默认的任务组名,触发器名,触发器组名)
- *
- * @参数jobName
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:49:51
- * @version V2.0
- * /
- public static void removeJob(String jobName){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME); //停止触发器
- sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME); //移除触发器
- sched.deleteJob(jobName,JOB_GROUP_NAME); //删除任务
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- / **
- * @Description:移除一个任务
- *
- * @参数jobName
- * @参数jobGroupName
- * @参数triggerName
- * @参数triggerGroupName
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:50:01
- * @version V2.0
- * /
- public static void removeJob(String jobName,String jobGroupName,
- 字符串triggerName,字符串triggerGroupName){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- sched.pauseTrigger(triggerName,triggerGroupName); //停止触发器
- sched.unscheduleJob(triggerName,triggerGroupName); //移除触发器
- sched.deleteJob(jobName,jobGroupName); //删除任务
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- / **
- * @Description:启动所有定时任务
- *
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:50:18
- * @version V2.0
- * /
- 公共静态无效的 startJobs(){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- sched.start();
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- / **
- * @Description:关闭所有定时任务
- *
- *
- * @Title:QuartzManager.java
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:50:26
- * @version V2.0
- * /
- public static void shutdownJobs(){
- 尝试 {
- 调度程序sched = gSchedulerFactory.getScheduler();
- 如果 (!sched.isShutdown()){
- sched.shutdown();
- }
- } 捕获 (例外五){
- 抛出新的 RuntimeException(e);
- }
- }
- }
以上就是石英任务调度对于任务的常用操作,封装起来以便在外部调用这样我们就需要任务的执行了!
- / **
- * @说明:
- *
- * @Title:QuartzJob.java
- * @包com.joyce.quartz
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:37:11
- * @version V2.0
- * /
- 包 com.joyce.quartz;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- 进口 org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- / **
- * @Description:任务执行类
- *
- * @ClassName:QuartzJob
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:37:11
- * @version V2.0
- * /
- 公共类 QuartzJob 实现 作业{
- @覆盖
- public void execute(JobExecutionContext arg0) throws JobExecutionException {
- System.out.println(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss” ).format(new Date())+ “” );
- }
- }
好吧,我们来测试一下:
- / **
- * @说明:
- *
- * @Title:QuartzTest.java
- * @包com.joyce.quartz.main
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:35:05
- * @version V2.0
- * /
- 包 com.joyce.quartz.main;
- import com.joyce.quartz.QuartzJob;
- import com.joyce.quartz.QuartzManager;
- / **
- * @Description:测试类
- *
- * @ClassName:QuartzTest
- * @版权:Copyright(c)2014
- *
- * @作者Comsys-LZP
- * @date 2014-6-26下午03:35:05
- * @version V2.0
- * /
- 公共类 QuartzTest {
- public static void main(String [] args){
- 尝试 {
- String job_name = “动态任务调度” ;
- System.out.println(“【系统启动】开始(每1秒输出一次)...” );
- QuartzManager.addJob(JOB_NAME,QuartzJob 类, “0/1 * * * *?” );
- Thread.sleep(5000 );
- System.out.println(“【修改时间】开始(每2秒输出一次)...” );
- QuartzManager.modifyJobTime(job_name, “10/2 * * * *?” );
- Thread.sleep(6000 );
- System.out.println(“【移除定时】开始...” );
- QuartzManager.removeJob(JOB_NAME);
- System.out.println(“【移除定时】成功” );
- System.out.println(“【再次添加定时任务】开始(每10秒输出一次)...” );
- QuartzManager.addJob(JOB_NAME,QuartzJob 类, “* / 10 * * * *?” );
- Thread.sleep(60000 );
- System.out.println(“【移除定时】开始...” );
- QuartzManager.removeJob(JOB_NAME);
- System.out.println(“【移除定时】成功” );
- } 捕获 (例外五){
- e.printStackTrace();
- }
- }
- }