实例地址:
http://download.csdn.net/download/hellorichen/10141253
一、jfinal+quartz定时任务
1.需导入的jar包
2.定时任务配置文件
3.将任务类添加至插件
4.任务类主方法
5.任务执行方法
6.动态添加定时任务
参考:
http://www.jfinal.com/share/15
http://www.jfinal.com/share/37
http://blog.csdn.net/ljasdf123/article/details/9973229
二、Quartz定时器
实例:
package com.demo.quartz;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
/**
* @filename QuartzManager.java
* @author l
* @version 创建时间:2017年12月2日 上午8:39:41
* @description
*/
public class QuartzManager {
private Logger log = LogManager.getLogger(QuartzManager.class);
private Scheduler scheduler = null;
public static final String DATA_KEY = "STATE_DATA";
public QuartzManager() {
try {
scheduler = new StdSchedulerFactory().getScheduler();
log.info("初始化调度器 ");
} catch (SchedulerException ex) {
log.error("初始化调度器=> [失败]:" + ex.getLocalizedMessage());
}
}
public void addJob(String name, String group, Class<? extends Job> clazz, String cronExpression) {
try {
// 构造任务
JobDetail job = newJob(clazz).withIdentity(name, group).build();
// 构造任务触发器
Trigger trg = newTrigger().withIdentity(name, group).withSchedule(cronSchedule(cronExpression)).build();
// Trigger trg = TriggerBuilder.newTrigger().withIdentity(name, group).startAt(new Date()).withSchedule(SimpleScheduleBuilder.simpleSchedule()
// .withIntervalInSeconds(5).repeatForever()).build();
// 将作业添加到调度器
scheduler.scheduleJob(job, trg);
log.info("创建作业=> [作业名称:" + name + " 作业组:" + group + "] ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("创建作业=> [作业名称:" + name + " 作业组:" + group + "]=> [失败]");
}
}
public void removeJob(String name, String group) {
try {
TriggerKey tk = TriggerKey.triggerKey(name, group);
scheduler.pauseTrigger(tk);// 停止触发器
scheduler.unscheduleJob(tk);// 移除触发器
JobKey jobKey = JobKey.jobKey(name, group);
scheduler.deleteJob(jobKey);// 删除作业
log.info("删除作业=> [作业名称:" + name + " 作业组:" + group + "] ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("删除作业=> [作业名称:" + name + " 作业组:" + group + "]=> [失败]");
}
}
public void pauseJob(String name, String group) {
try {
JobKey jobKey = JobKey.jobKey(name, group);
scheduler.pauseJob(jobKey);
log.info("暂停作业=> [作业名称:" + name + " 作业组:" + group + "] ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("暂停作业=> [作业名称:" + name + " 作业组:" + group + "]=> [失败]");
}
}
public void resumeJob(String name, String group) {
try {
JobKey jobKey = JobKey.jobKey(name, group);
scheduler.resumeJob(jobKey);
log.info("恢复作业=> [作业名称:" + name + " 作业组:" + group + "] ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("恢复作业=> [作业名称:" + name + " 作业组:" + group + "]=> [失败]");
}
}
public void modifyTime(String name, String group, String cronExpression) {
try {
TriggerKey tk = TriggerKey.triggerKey(name, group);
// 构造任务触发器
// Trigger trg = newTrigger().withIdentity(name, group).withSchedule(cronSchedule(cronExpression)).build();
Trigger trg = TriggerBuilder.newTrigger().withIdentity(name, group).startAt(new Date()).withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5).repeatForever()).build();
scheduler.rescheduleJob(tk, trg);
log.info("修改作业触发时间=> [作业名称:" + name + " 作业组:" + group + "] ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("修改作业触发时间=> [作业名称:" + name + " 作业组:" + group + "]=> [失败]");
}
}
public void start() {
try {
scheduler.start();
log.info("启动调度器 ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("启动调度器=> [失败]");
}
}
public void shutdown() {
try {
scheduler.shutdown();
log.info("停止调度器 ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("停止调度器=> [失败]");
}
}
public static void main(String[] args) {
QuartzManager qm = new QuartzManager();
String name = "DynamicJobName";
String group = "DynamicJobGroup";
String cronExpression = "*/10 * * * * ?";
qm.addJob(name, group, DynamicJob.class, cronExpression);
qm.start();
}
}
原来还可以import导入变量,以为只能导入类。
import static org.quartz.CronScheduleBuilder.cronSchedule;
参考:
http://blog.csdn.net/lnara/article/details/8636656