public class PsmsCleanJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
JobDataMap map = context.getMergedJobDataMap();
Object obj = map.get("params");
}
}
package com.lec.util.job;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
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.Trigger;
import org.quartz.impl.StdSchedulerFactory;
/**
* CronTrigger任务调度器
* @author lcy
* Dec 1, 2011
*/
public class CronTriggerRunner {
private static SchedulerFactory sf = new StdSchedulerFactory();
/**
* 根据任务名和任务组名查询一个任务
* @param jobName
* @param jobGroupName
* @return
* @throws SchedulerException
*/
public static JobDetail getJob(String jobName,String jobGroupName) throws SchedulerException{
Scheduler sched = sf.getScheduler();
JobDetail jobDetail=sched.getJobDetail(jobName, jobGroupName);
if(jobDetail != null){
return jobDetail;
}
return null;
}
/**
* 添加一个CronTrigger定时任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param job 任务
* @param time 时间设置,参考quartz说明文档
* @param params 传递参数
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,String jobGroupName,String triggerName,
String triggerGroupName,String time,HashMap<String,Object> params,
Job jobClass) throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass.getClass());//任务名,任务组,任务执行类
if(params != null){
jobDetail.getJobDataMap().put("params",params);
}
//触发器
CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组
trigger.setCronExpression(time);//触发器时间设定
sched.scheduleJob(jobDetail,trigger);
if(!sched.isShutdown())
sched.start();
}
/**
* 添加一个SimpleTrigger定时任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param startTime 开始时间
* @param repeatInterval 间隔时间
* @param repeatCount 调用次数
* @param jobClass 任务
* @param params 传递参数
* @throws SchedulerException
*/
public static void addJob(String jobName,String jobGroup,
String triggerName,String triggerGroup,Date startTime,
Integer repeatInterval,Integer repeatCount,Job jobClass,
HashMap<String,Object> params) throws
SchedulerException{
JobDetail jobDetail = new JobDetail(jobName, jobGroup, jobClass.getClass());
if(params != null){
jobDetail.getJobDataMap().put("params",params);
}
//触发器
SimpleTrigger simpleTrigger = new SimpleTrigger(triggerName, triggerGroup);
//设置开始时间
simpleTrigger.setStartTime(startTime);
//设置间隔时间
simpleTrigger.setRepeatInterval(repeatInterval);
//设置调用次数
simpleTrigger.setRepeatCount(repeatCount);
Scheduler sched = sf.getScheduler();
sched.scheduleJob(jobDetail,simpleTrigger);
if(!sched.isShutdown())
sched.start();
}
/**
* 根据任务名和任务组名修改任务的触发时间
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyJobTime(String jobName,String jobGroupName,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger[] trigger = sched.getTriggersOfJob(jobName,jobGroupName);
if(trigger != null){
for(int i=0;i<trigger.length;i++){
((CronTrigger)trigger[i]).setCronExpression(time);
sched.resumeTrigger(trigger[i].getName(),trigger[i].getGroup());
}
}
}
/**
* 根据触发器名修改一个任务的触发时间
* @param triggerName触发器名
* @param triggerGroupName触发器组名
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyTriggerTime(String triggerName,String triggerGroupName,
String time) throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);
if(trigger != null){
//修改时间
((CronTrigger)trigger).setCronExpression(time);
//重启触发器
sched.resumeTrigger(triggerName,triggerGroupName);
}
}
/**
* 移除任务
* @param jobName任务名
* @param jobGroupName任务组名
* @param triggerGroupName触发器组名
* @throws SchedulerException
*/
public static void removeJob(String jobName,String jobGroupName,String triggerGroupName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
String[] triggerNames = sched.getTriggerNames(triggerGroupName);
if(triggerNames!=null){
for(int i=0;i<triggerNames.length;i++){
sched.pauseTrigger(triggerNames[i],triggerGroupName);//停止触发器
sched.unscheduleJob(triggerNames[i],triggerGroupName);//移除触发器
}
}
sched.deleteJob(jobName,jobGroupName);//删除任务
}
/**
* 移除一个任务
* @param jobName任务名
* @param jobGroupName任务组名
* @param triggerName触发器名
* @param triggerGroupName触发器组名
* @throws SchedulerException
*/
public static void removeJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器
sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器
sched.deleteJob(jobName,jobGroupName);//删除任务
}
/**
* 计算时间表达式
* @param second 秒
* @param minute 分
* @param hour 时
* @param day 日期
* @param month 月份
* @param week 星期
* @param year 年份
* @param isContactYear 是否包括年份
* @return
*/
public static String getCexpress(String second,String minute,String hour,
String day,String month,String week,String year,boolean isContactYear) {
String cexpress="";
//秒,默认为"0" 取值范围:0-59
if(second != null && !"".equals(second)){
cexpress+=second+" ";
}else{
cexpress+="0 ";
}
/**
* 分 取值范围:0-59
* 默认为"*" 表示每一分钟
* 如果是0 12 表示整12:00触发
* 如果是0/5 12 表示在每天下午12点到12:55期间的每5分钟触发 ,
* 如果是0-5 12 表示12:00到12:05期间的每1分钟触发
* 如果是10,15 12 表示12:10和12:15触发
*/
if(minute != null && !"".equals(minute)){
cexpress+=minute+" ";
}else{
cexpress+="* ";
}
/**
* 小时 取值范围:0-23
* 默认为"*" 表示每一个小时
* 如果是0 表示凌晨触发
* 如果是0-5 表示凌晨到5:00期间
* 如果是10,15 表示10:00和15:00触发
*/
if(hour != null && !"".equals(hour)){
cexpress+=hour+" ";
}else{
cexpress+="* ";
}
/**
* 日期 取值范围:1-31
* 默认为"*" 表示每天
* 如果是15 表示每个月的15号
* 如果是L 表示每个月最后一天
* 注:在指定了星期的时候,把日期这里设置为"?"
*/
if(day != null && !"".equals(day)){
cexpress+=day+" ";
}else{
cexpress+="* ";
}
/**
* 月份 取值范围:1-12
* 默认为"*" 表示每个月
* 如果是 12 表示12月份
*/
if(month != null && !"".equals(month)){
cexpress+=month+" ";
}else{
cexpress+="* ";
}
/**
* 星期 取值范围:1-7 MON,TUE,WED,THU,FRI,SAT,SUN 其中1表示星期日,以此类推
* 默认为"?"
* 如果是WED 表示每个星期三
* 如果是MON-FRI 表示星期一到星期五
* 如果是6L 表示每月最后一个星期五
* 如果是6#3 表示每月第三个星期五
*/
if(week != null && !"".equals(week)){
cexpress+=week+" ";
}else{
cexpress+="? ";
}
//如果包括年份
if(isContactYear){
/**
* 年份 取值范围:1970-2099
* 默认值为空
* 如果是2010 表示只有2010年触发时间
* 如果是2010,2020 表示只有2010
*/
if(year != null && !"".equals(year)){
cexpress+=year;
}
}
return cexpress;
}
public static void main(String [] args){
try {
// JobDetail jobDetail = new JobDetail(ResTypeDTO.PSMSCFG_JOBNAME,
// ResTypeDTO.PSMSCFG_JOBGROUPNAME,PsmsCleanJob.class);
// // ①-1:创建CronTrigger,指定组及名称
// CronTrigger cronTrigger = new CronTrigger(ResTypeDTO.PSMSCFG_TRIGGERNAME,
// ResTypeDTO.PSMSCFG_TRIGGERGROUPNAME);
// // ①-2:定义Cron表达式
// String timeexp = "";
// String second = "0";
// String minute = "15";
// String hour = "0";
// String day = "L";//当月的最后一天
// String month = "";
// String week = "?";
// month = "6,12";
// timeexp = getCexpress(second, minute, hour, day, month, week, null, false);
//
// if(!"0 * * * * ?".equals(timeexp)){//如果没有设置时间则不执行
// CronExpression cexp = new CronExpression(timeexp);
// // ①-3:设置Cron表达式
// cronTrigger.setCronExpression(cexp);
// Scheduler scheduler = sf.getScheduler();
// scheduler.scheduleJob(jobDetail, cronTrigger);
// scheduler.start();
// }
// Date startDate = entity.getStartDate();
// String startTime = entity.getStarttime();
// Integer delaytime = entity.getDelaytime();
// String unit = entity.getUnit();
String jobName = "cal_job_name_";
String jobGroupName = "cal_job_group_name";
String triggerName = "cal_trigger_name_";
String triggerGroupName = "cal_trigger_group_name";
Date beginTime = new Date(System.currentTimeMillis() + 60000L);//当前时间过60秒钟后开始
Integer repeatInterval = 5000;//以毫秒为单位
Integer repeatCount = 0;
try {
CronTriggerRunner.addJob(jobName,jobGroupName,triggerName,
triggerGroupName,beginTime,repeatInterval,
repeatCount,new CalendarJob(),new HashMap<String,Object>());
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
Quartz任务调度器与spring整合,做项目的时候常听测试说谁在起着quartz,也不知道是啥,问了下同事,就是定时去执行某些任务的,刚好bug比较少,学习了一下~
使用DOC写的quartz任务调度使用手册,非常具体,有截图和使用的具体说明,通俗易懂。
里面包含了两个工程项目: 1.Java project工程(含jar包,JDK1.6)。 是spring+quartz的任务调度实例。 2.Java web工程(含jar包,JDK1.7)。 spring+mybatis+quartz任务调度实例
Quartz任务调度--详细教程,讲的非常详细
Quartz任务调度框架教程中文版 chm格式
Quartz任务调度:根据时间,执行任务。 Quartz工作原理 1) 任务:需要执行的具体工作。 2) 触发器:在特定的时间触发任务的执行。 3) 调度器:任务的实际执行者,负责粘合任务和触发器。
代码版 springMVC+quartz任务调度
Spring Quartz 任务调度实例 可直接运行 可应用服务器启动调用 也可main入口调用 主要用于打jar包用
基于Quartz任务调度系统,调用外部exe文件执行任务,在本公司服务器上已运行了2年,稳定性超好
spring+quartz任务调度代码版
Spring中Quartz任务调度器cronexpression配置说明
quartz 定时任务调度
公司项目中做Quartz任务调度所需jar包,分享给大家。 包括:log4j-1.2.16.jar,quartz-2.2.3.jar,quartz-jobs-2.2.3.jar,slf4j-api-1.7.7.jar,slf4j-log4j12-1.7.7.jar
详细解释关于Quartz任务调度的实战使用等问题,整理好了必要的工具及jar包等,并分析了使用场景及dome
quartz任务调度初学者的法宝,让所学者很快从菜鸟变成编程高手
Spring+Quartz实现任务调度的小例子.本来不要资源分的,可是CSDN发布资源最低要求填写分值为1分,没办法了。
Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述
spring quartz java任务调度 完整 可执行