接普通任务
spring配置(其实只要这一行足矣,去掉了原先”taskJob”、”myTrigger”等配置):
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"/>
package com.leo.quartzTask;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* quartz示例定时器类
* @author Administrator
*/
public class QuartzJobExample implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "*******************");
}
}
package com.leo.quartzTask;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.TriggerKey;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.triggers.CronTriggerImpl;
/**
* Quartz调度管理器
*
* @author Administrator
*
*/
public class QuartzManager {
private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
/**
* @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @param sched 调度器
* @param jobName 任务名
* @param cls 任务
* @param time 时间设置,参考quartz说明文档
* @Title: QuartzManager.java
*/
public static void addJob(Scheduler sched, String jobName, @SuppressWarnings("rawtypes") Class cls, String time) {
try {
JobDetail jobDetail = new JobDetailImpl(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类
// 触发器
CronTrigger trigger = new CronTriggerImpl(jobName, TRIGGER_GROUP_NAME, time);// 触发器名,触发器组,时间
sched.scheduleJob(jobDetail, trigger);
// 启动
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 添加一个定时任务
* @param sched 调度器
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param jobClass 任务
* @param time 时间设置,参考quartz说明文档
* @Title: QuartzManager.java
*/
public static void addJob(Scheduler sched, String jobName, String jobGroupName, String triggerName,
String triggerGroupName, @SuppressWarnings("rawtypes") Class jobClass, String time) {
try {
JobDetail jobDetail = new JobDetailImpl(triggerName, triggerGroupName, jobClass);// 任务名,任务组,任务执行类
// 触发器
CronTrigger trigger = new CronTriggerImpl(triggerName, triggerGroupName, time);// 触发器名,触发器组
sched.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
* @param sched 调度器
* @param jobName
* @param time
* @Title: QuartzManager.java
*/
@SuppressWarnings("rawtypes")
public static void modifyJobTime(Scheduler sched, String jobName, String time) {
try {
CronTrigger trigger = (CronTrigger) sched.getTrigger(new TriggerKey(jobName, TRIGGER_GROUP_NAME));
if (trigger == null) {
return;
}
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(time)) {
JobDetail jobDetail = sched.getJobDetail(new JobKey(jobName, JOB_GROUP_NAME));
Class objJobClass = jobDetail.getJobClass();
removeJob(sched, jobName);
addJob(sched, jobName, objJobClass, time);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 修改一个任务的触发时间
* @param sched 调度器
* @param triggerName
* @param triggerGroupName
* @param time
* @Title: QuartzManager.java
*/
public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) {
try {
CronTrigger trigger = (CronTrigger) sched.getTrigger(new TriggerKey(triggerName, triggerGroupName));
if (trigger == null) {
return;
}
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(time)) {
CronTriggerImpl ct = (CronTriggerImpl) trigger;
// 修改时间
ct.setCronExpression(time);
// 重启触发器
sched.resumeTrigger(new TriggerKey(triggerName, triggerGroupName));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
* @param sched 调度器
* @param jobName
* @Title: QuartzManager.java
*/
public static void removeJob(Scheduler sched, String jobName) {
try {
sched.pauseTrigger(new TriggerKey(jobName, TRIGGER_GROUP_NAME));// 停止触发器
sched.unscheduleJob(new TriggerKey(jobName, TRIGGER_GROUP_NAME));// 移除触发器
sched.deleteJob(new JobKey(jobName, JOB_GROUP_NAME));// 删除任务
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 移除一个任务
* @param sched 调度器
* @param jobName
* @param jobGroupName
* @param triggerName
* @param triggerGroupName
* @Title: QuartzManager.java
*/
public static void removeJob(Scheduler sched, String jobName, String jobGroupName, String triggerName,
String triggerGroupName) {
try {
sched.pauseTrigger(new TriggerKey(triggerName, triggerGroupName));// 停止触发器
sched.unscheduleJob(new TriggerKey(triggerName, triggerGroupName));// 移除触发器
sched.deleteJob(new JobKey(triggerName, triggerGroupName));// 删除任务
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description:启动所有定时任务
* @param sched 调度器
* @Title: QuartzManager.java
*/
public static void startJobs(Scheduler sched) {
try {
sched.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description:关闭所有定时任务
* @param sched 调度器
* @Title: QuartzManager.java
*/
public static void shutdownJobs(Scheduler sched) {
try {
if (!sched.isShutdown()) {
sched.shutdown();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
package com.leo.quartzTask;
import org.junit.Test;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
/**
* @Description: 测试类
*
* @ClassName: QuartzTest.java
*/
public class QuartzTest {
@Test
public void quartz() {
try {
SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
Scheduler sche = gSchedulerFactory.getScheduler();
String job_name = "动态任务调度";
System.out.println("【系统启动】开始(每1秒输出一次)...");
QuartzManager.addJob(sche, job_name, QuartzJobExample.class, "0/1 * * * * ?");
Thread.sleep(3000);
System.out.println("【修改时间】开始(每2秒输出一次)...");
QuartzManager.modifyJobTime(sche, job_name, "10/2 * * * * ?");
Thread.sleep(4000);
System.out.println("【移除定时】开始...");
QuartzManager.removeJob(sche, job_name);
System.out.println("【移除定时】成功");
System.out.println("【再次添加定时任务】开始(每10秒输出一次)...");
QuartzManager.addJob(sche, job_name, QuartzJobExample.class, "*/10 * * * * ?");
Thread.sleep(30000);
System.out.println("【移除定时】开始...");
QuartzManager.removeJob(sche, job_name);
System.out.println("【移除定时】成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.leo.quartzTask;
/**
* 计划任务信息
* @author leo
*
*/
public class ScheduleJob {
/** 任务id */
private String jobId;
/** 任务名称 */
private String jobName;
/** 任务分组 */
private String jobGroup;
/** 任务状态 0禁用 1启用 2删除*/
private String jobStatus;
/** 任务运行时间表达式 */
private String cronExpression;
/** 任务描述 */
private String desc;
public ScheduleJob() {
}
public ScheduleJob(String jobId, String jobName, String jobGroup, String jobStatus, String cronExpression,
String desc) {
super();
this.jobId = jobId;
this.jobName = jobName;
this.jobGroup = jobGroup;
this.jobStatus = jobStatus;
this.cronExpression = cronExpression;
this.desc = desc;
}
public String getJobId() {
return jobId;
}
public void setJobId(String jobId) {
this.jobId = jobId;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public String getJobGroup() {
return jobGroup;
}
public void setJobGroup(String jobGroup) {
this.jobGroup = jobGroup;
}
public String getJobStatus() {
return jobStatus;
}
public void setJobStatus(String jobStatus) {
this.jobStatus = jobStatus;
}
public String getCronExpression() {
return cronExpression;
}
public void setCronExpression(String cronExpression) {
this.cronExpression = cronExpression;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}