Quartz 2.2 的实现原理和运行过程, 请阅读我的另一篇文章:/xlxxcc/article/details/52104463
下面直接上代码:
动态添加、修改和删除定时任务管理类
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class QuartzManager {
private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
/**
* @Description: 添加一个定时任务
*
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param jobClass 任务
* @param cron 时间设置,参考quartz说明文档
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void addJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName, Class jobClass, String cron) {
try {
Scheduler sched = ();
// 任务名,任务组,任务执行类
JobDetail jobDetail= (jobClass).withIdentity(jobName, jobGroupName).build();
// 触发器
TriggerBuilder<Trigger> triggerBuilder = ();
// 触发器名,触发器组
(triggerName, triggerGroupName);
();
// 触发器时间设定
((cron));
// 创建Trigger对象
CronTrigger trigger = (CronTrigger) ();
// 调度容器设置JobDetail和Trigger
(jobDetail, trigger);
// 启动
if (!()) {
();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 修改一个任务的触发时间
*
* @param jobName
* @param jobGroupName
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param cron 时间设置,参考quartz说明文档
*/
public static void modifyJobTime(String jobName,
String jobGroupName, String triggerName, String triggerGroupName, String cron) {
try {
Scheduler sched = ();
TriggerKey triggerKey = (triggerName, triggerGroupName);
CronTrigger trigger = (CronTrigger) (triggerKey);
if (trigger == null) {
return;
}
String oldTime = ();
if (!(cron)) {
/** 方式一 :调用 rescheduleJob 开始 */
// 触发器
TriggerBuilder<Trigger> triggerBuilder = ();
// 触发器名,触发器组
(triggerName, triggerGroupName);
();
// 触发器时间设定
((cron));
// 创建Trigger对象
trigger = (CronTrigger) ();
// 方式一 :修改一个任务的触发时间
(triggerKey, trigger);
/** 方式一 :调用 rescheduleJob 结束 */
/** 方式二:先删除,然后在创建一个新的Job */
//JobDetail jobDetail = ((jobName, jobGroupName));
//Class<? extends Job> jobClass = ();
//removeJob(jobName, jobGroupName, triggerName, triggerGroupName);
//addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron);
/** 方式二 :先删除,然后在创建一个新的Job */
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 移除一个任务
*
* @param jobName
* @param jobGroupName
* @param triggerName
* @param triggerGroupName
*/
public static void removeJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName) {
try {
Scheduler sched = ();
TriggerKey triggerKey = (triggerName, triggerGroupName);
(triggerKey);// 停止触发器
(triggerKey);// 移除触发器
((jobName, jobGroupName));// 删除任务
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description:启动所有定时任务
*/
public static void startJobs() {
try {
Scheduler sched = ();
();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description:关闭所有定时任务
*/
public static void shutdownJobs() {
try {
Scheduler sched = ();
if (!()) {
();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
任务类
import ;
import ;
import ;
import ;
public class MyJob implements Job{
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
(new Date() + ": doing something...");
}
}
测试类
public class Test {
public static String JOB_NAME = "动态任务调度";
public static String TRIGGER_NAME = "动态任务触发器";
public static String JOB_GROUP_NAME = "XLXXCC_JOB_GROUP";
public static String TRIGGER_GROUP_NAME = "XLXXCC_JOB_GROUP";
public static void main(String[] args) {
try {
System.out.println("【系统启动】开始(每1秒输出一次)...");
(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME, , "0/1 * * * * ?");
(5000);
System.out.println("【修改时间】开始(每5秒输出一次)...");
(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME, "0/5 * * * * ?");
(6000);
System.out.println("【移除定时】开始...");
(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME);
System.out.println("【移除定时】成功");
} catch (Exception e) {
();
}
}
}