SimpleTriggerBean: 简单触发器.
startDelay: 指点一次执行时的延迟.
jobDetail: 任务详情,不解释
jobDataAsMap:设置任务中的JobDataMap
repeatCount: 重复次数[配置为0时执行一次]
repeatInterval: 两次执行时的间隔
timesTriggered: 执行次数[没用过]
(一般的任务定时调度使用SimpleTrigger就够了).
如何实现动态定时程序,比如,我设置A任务在2012年9月28日完成,B任务在2012年9月30日完成,如果到期还没有完成则发个邮件给我.
设计思路,创建一个方法,然后在自己的Scheduler中,动态添加任务.
Quartz任务本身不带状态,比如A任务,只有A的的功能,他不带有2012-09-28,那么必须动态生成一个触发器.还有一件事,任务有没有完成当然需要任务监听器了,监听完成了不需要发,没有完成则发邮件.
于是如下:
1. 首先定义任务A
package test.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob;
public class QuartzReport implements StatefulJob {
public void execute(JobExecutionContext cntxt) throws JobExecutionException {
System.out.println("杨春龙,太帅了");
System.out.println("不是我说的");
System.out.println( " Generating report - "
+ cntxt.getJobDetail().getJobDataMap().get("type")
+ "-"
+ new Date());
JobDataMap jobDataMap = cntxt.getJobDetail().getJobDataMap();
jobDataMap.put("success", true);
}
}
任务2:
package test.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzReport1 implements Job {
public void execute(JobExecutionContext cntxt) throws JobExecutionException {
System.out.println("杨春龙,你帅我也帅");
System.out.println( " Generating report - "
+ cntxt.getJobDetail().getJobDataMap().get("type")
+ "-"
+ new Date());
JobDataMap jobDataMap = cntxt.getJobDetail().getJobDataMap();
jobDataMap.put("success", false);
}
}
2. 定义监听器:
package test.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.listeners.JobListenerSupport;
public class JobListener extends JobListenerSupport {
public String getName() {
// TODO Auto-generated method stub
return "JobListener";
}
public void jobWasExecuted(JobExecutionContext context,
JobExecutionException jobException) {
Boolean flag = (Boolean) context.getJobDetail().getJobDataMap().get("success");
if(!flag){
System.out.println("拉出去枪BI了,任务没完成");
}else{
System.out.println("好孩子,去睡觉吧");
}
}
}
3. 已经完好了,因为触发器是需要动态生成执行的,代码如下:
package test.quartz;
import java.util.Calendar;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.listeners.JobListenerSupport;
import org.springframework.scheduling.quartz.SimpleTriggerBean;
public class TestJob3 {
/**
* 每一个Scheduler都是一个线程,外部程序如何与线程进行交互
*
* @param args
*/
public static void main(String[] args) {
TestJob3 test = new TestJob3();
SchedulerFactory sf = new StdSchedulerFactory();
JobListener jobListener = new JobListener();
/*
* 任务A详情1如下
*/
String jobName="job";
String jobGroup="job_group";
Class jobClass= QuartzReport.class;
String triggerName="triger";
String triggerGroup = "tirger_group";
long cc=1000l;//2012-09-28
int repeat=0;
test.createScheduler(sf, jobName, jobGroup, jobClass, triggerName, triggerGroup, cc,repeat,jobListener);
/*
* 任务B详情1如下
*/
String jobName1="job1";
String jobGroup1="job_group";
Class jobClass1= QuartzReport1.class;
String triggerName1="triger1";
String triggerGroup1 = "tirger_group";
long cc1=1000*60l;//2012-09-30
int repeat1=0;
test.createScheduler(sf, jobName1, jobGroup1, jobClass1, triggerName1, triggerGroup1, cc1,repeat1,jobListener);
}
/**
* jobGroup 允许为null,Scheduler.DEFAULT_GROUP
* @param scheduler
* @param jobName
* @param jobGroup
* @param jobclass
*/
public void createScheduler(SchedulerFactory sf,
String jobName,String jobGroup,Class jobclass,
String triggerName,String triggerGroup,long c,int repeat,JobListenerSupport jobListener){
JobDetail jobDetail = new JobDetail(jobName,jobGroup,jobclass);
jobDetail.addJobListener("JobListener");
SimpleTrigger trigger = new SimpleTrigger(triggerName,triggerGroup);
trigger.setStartTime(new Date(System.currentTimeMillis() + c));//设置开始时间
//trigger.setStartDelay(c);//设置延迟时间
//trigger.setRepeatInterval(c);//设置间隔时间
trigger.setRepeatCount(repeat);//设置循环次数
try {
Scheduler scheduler = sf.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.addJobListener(jobListener);//添加监听
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
本项目聚焦于使用Java编程语言和Quartz库来实现一个简单的任务调度器。 Quartz是一个开源的作业调度框架,允许开发者创建、调度和管理任务。它提供了丰富的API,支持复杂的调度策略,如定时、间隔、依赖关系等。...
Quartz.Net是一个强大的开源任务调度框架,用于在.NET环境中创建和执行定时任务。它提供了灵活的调度机制,允许开发者在应用程序中定义复杂的作业执行规则,从而实现自动化的工作流程。Quartz.NET不仅支持简单的定时...
【标题】:基于Spring Boot和Quartz的分布式任务调度系统 在现代企业级应用中,任务调度是一项重要的功能,用于按预定的时间间隔执行特定的任务,例如数据同步、报表生成、清理过期数据等。本项目名为“schedule-...
在".NET 简单任务调度平台"中,主要功能包括: 1. **任务挂载**:开发者可以将.NET的DLL或EXE文件作为任务进行挂载,这意味着你可以将任何.NET可执行代码包装成一个任务,并将其纳入调度系统中。 2. **任务隔离**...
Quartz.Net是一个强大的任务调度框架,它在.NET环境中被广泛应用,...这个QuartzDemo压缩包很可能是包含了一个简单的Quartz.Net应用实例,你可以解压后学习其结构和代码,以便更好地理解和使用这个强大的任务调度框架。
【Quartz任务调度集群】是Java开发中解决定时任务需求的一种高效方案,它由OpenSymphony团队开发,自2001年以来广泛应用于各种项目。Quartz的核心优势在于其灵活性和简单性,允许开发者自由定义任务触发的时间表,...
Quartz.NET是一款强大的开源任务调度库,它允许开发者在.NET应用程序中定义、安排和执行周期性的任务。Quartz.NET的设计灵感来源于Java的Quartz项目,它提供了高度灵活且可靠的作业调度框架,支持复杂的调度需求。 ...
本“quartz任务调度框架简单实用小demo”旨在帮助开发者快速理解和应用Quartz。 1. **Quartz基本概念** - **Job**: 任务的基本单元,代表一个需要执行的工作。 - **Trigger**: 触发器,决定Job何时被执行。 - **...
Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...
在本文中,我们将深入探讨如何在Spring中集成Quartz进行任务调度,并通过一个简单的示例来理解其工作原理。 首先,要在Spring中使用Quartz,你需要将`quartz-all-1.5.2.jar`等相关的Quartz库添加到项目的类路径中。...
基于Spring Boot和Quartz的分布式任务调度系统 项目简介 本项目是一个基于Spring Boot和Quartz框架的分布式任务调度系统,旨在提供一个灵活、可扩展的任务调度解决方案。系统支持多种任务类型,包括RPC任务、Cron...
接下来,我们来看看如何在Java中实现一个简单的任务调度: 1. **定义Job**:创建一个新的Java类,实现`Job`接口,例如: ```java public class MyJob implements Job { @Override public void execute...
结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...
Quartz是一款广泛应用于Java环境中的开源任务调度框架,它提供了高度可配置的作业调度系统,使得开发者能够轻松地在应用程序中实现定时任务的管理。Quartz的核心特性包括但不限于以下几点: 1. **灵活的调度**:...
Quartz是Java领域一款强大的开源任务调度框架,它允许开发者...通过研究和理解这个示例,你可以掌握如何在自己的Java应用中使用Quartz进行任务调度,无论是简单的周期性任务还是复杂的定时策略,Quartz都能轻松应对。
Quartz是Java领域的一款强大的开源任务调度框架,广泛应用于企业级应用系统中,用于执行定时或周期性的任务。在这个"quartz1.5.0 任务调度demo"中,我们将会探讨如何使用Quartz实现任务的增删改功能,以及其三大核心...
Quartz.NET是一个开源的任务调度框架,它允许开发者在.NET环境中创建、安排和执行各种类型的任务。这个系统的主要目的是实现应用程序的后台任务自动化,比如定期数据备份、清理过期记录、发送邮件等。在"任务调度...
这种方式非常简单,开发者只需要在 Spring 配置文件中定义相应的 Bean,就可以使用 Quartz 实现任务调度。 以下是一个简单的示例代码: ```xml <bean id="overdueRecall" class="com.sursen.souba.ddlibserve....
【Quartz任务调度框架】 Quartz是一个开源的任务调度框架,非常适合初学者入门。它为Java开发者提供了一种高效且可控的方式来实现定时任务的调度。在各种企业应用中,任务调度的需求非常常见,例如定期清理系统垃圾...
**C#基于Quartz任务调度系统** 在软件开发中,任务调度是一项重要的功能,它允许开发者安排任务在特定时间执行,比如数据同步、定时备份、报告生成等。Quartz是一款强大的开源任务调度库,广泛应用于Java和.NET生态...