草稿,还带完善
本例子基于Spring3.1.1、Quartz2.2.1
项目结构如下:
1、首先在applicationContext.xml文件中配置bean文件
“`
package com.ims.scheduler;
public class ScheduleTask {
private String id;
private String parentId = "";
private String name = "";
private String desc = "";
private int planExe = 0;
private String group = "";//规定是执行的类名
private String groupDesc = "";
private String cron = "";
private String cronDesc = "";
private String trigger = "";//规定是执行的方法名
private String triggerDesc = "";
private int execute = 0;
private Long lastExeTime = 0L;
private Long lastFinishTime = 0L;
private int state = 1;
private int deply = 0;
public ScheduleTask(String taskId){
this.id = taskId;
}
//setter,getter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public int getPlanExe() {
return planExe;
}
public void setPlanExe(int planExe) {
this.planExe = planExe;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public String getCron() {
return cron;
}
public void setCron(String cron) {
this.cron = cron;
}
public String getCronDesc() {
return cronDesc;
}
public void setCronDesc(String cronDesc) {
this.cronDesc = cronDesc;
}
public String getTrigger() {
return trigger;
}
public void setTrigger(String trigger) {
this.trigger = trigger;
}
public String getTriggerDesc() {
return triggerDesc;
}
public void setTriggerDesc(String triggerDesc) {
this.triggerDesc = triggerDesc;
}
public int getExecute() {
return execute;
}
public void setExecute(int execute) {
this.execute = execute;
}
public Long getLastExeTime() {
return lastExeTime;
}
public void setLastExeTime(Long lastExeTime) {
this.lastExeTime = lastExeTime;
}
public Long getLastFinishTime() {
return lastFinishTime;
}
public void setLastFinishTime(Long lastFinishTime) {
this.lastFinishTime = lastFinishTime;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public int getDeply() {
return deply;
}
public void setDeply(int deply) {
this.deply = deply;
}
}
3、管理任务类TaskService
package com.ims.service;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
import com.ims.scheduler.ScheduleTask;
@Component
public class TaskService {//implements ApplicationContextAware
@Autowired
@Qualifier("schedulerFactoryBean")
private SchedulerFactoryBean schedulerFactory;
private Scheduler scheduler = schedulerFactory.getScheduler();
@SuppressWarnings("unchecked")
public int addTask(ScheduleTask task) throws ClassNotFoundException, SchedulerException{
// Scheduler scheduler = schedulerFactory.getScheduler();
// JobDetail taskDetail = new JobDetail(task.getId(),task.getGroup(),ProxyJob.class);
// CronTrigger trigger = new CronTrigger(task.getId(),task.getTrigger());
// trigger.setCronExpression(task.getCron());
Class<?> clazz = Class.forName(task.getGroup());
JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) clazz).withIdentity(task.getId(), task.getGroup()).build();// 构建job信息
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(task.getCron());// 表达式调度构建器
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(task.getId(), task.getGroup()).withSchedule(cronScheduleBuilder).build();// 按cronExpression表达式构建trigger
scheduler.scheduleJob(jobDetail, trigger);//设置定时任务
if(!scheduler.isShutdown()){
scheduler.start();
}
return 0;
}
public int addTask(String taskName,String taskClassName,String cron) throws ClassNotFoundException, SchedulerException{
Class<?> clazz = Class.forName(taskClassName);
ScheduleTask task = new ScheduleTask(""+System.currentTimeMillis());//taskId号默认为创建时间
task.setGroup(clazz.getName());//处理类
task.setName(taskName);//任务名称,暂时没有意义
task.setCron(cron);
return addTask(task);
}
public int deleteTask(ScheduleTask task) throws SchedulerException{
scheduler.deleteJob(JobKey.jobKey(task.getId(), task.getGroup()));
return 0;
}
// public ScheduleTask addTask(String taskName,String taskClassName,String cron) throws ClassNotFoundException, SchedulerException{
// Class<?> clazz = Class.forName(taskClassName);
// ScheduleTask task = createSchedulerTask(clazz);
// task.setName(taskName);//任务名称,暂时没有意义
// task.setCron(cron);
// return addTask(task);
// }
// private ScheduleTask createSchedulerTask(Class<?> clazz) {
// ScheduleTask task = new ScheduleTask(""+System.currentTimeMillis());//taskId号默认为创建时间
// task.setGroup(clazz.getName());
// return task;
// }
// public ScheduleTask addTask(String taskName,String taskClassName,String triggerName,String cron) throws Exception{
// Class<?> clazz = Class.forName(taskClassName);
// Method m = clazz.getMethod(triggerName);
// ScheduleTask task = createSchedulerTask(m);
// task.setName(taskName);
// task.setCron(cron);
// return addTask(task);
// }
//
// private ScheduleTask createSchedulerTask(Method m) {
// ScheduleTask task = new ScheduleTask(""+System.currentTimeMillis());
//
// Class<?> clazz = m.getDeclaringClass();
// task.setGroup(clazz.getName());
// task.setTrigger(clazz.getName()+"."+m.getName());
//
// return task;
// }
}
4、待执行的任务内容
package com.ims.scheduler;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyTask implements Job{
// public void exe(){
// System.out.println("======执行定时任务=======");
// }
// @Override
// public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// JobParameter jobParam = (JobParameter) jobExecutionContext.getJobDetail().getJobDataMap()
// .get(JobParameter.JOB_PARAM);
// if (jobParam != null) {
// System.out.println(jobParam.getDescription());
// } else {
// System.out.println("Hey, can't find job parameter ...:)");
// }
// }
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("<<<<<<<<<<>>>>>>>>>>>");
}
}
5、测试action类
package com.ims.action;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import com.alibaba.fastjson.JSON;
import com.ims.bean.LoginInfo;
import com.ims.dao.LoginDao;
import com.ims.scheduler.JobParameter;
import com.ims.scheduler.MyJob;
import com.ims.scheduler.ScheduleTask;
import com.ims.service.TaskService;
import com.opensymphony.xwork2.ActionSupport;
@Component
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 129849811686835841L;
@Autowired
private TaskService taskService;
@Autowired
@Qualifier("schedulerFactoryBean")
private SchedulerFactoryBean schedulerFactory;
private transient LoginInfo loginInfo;
public String check(){
testAddJob();
return "init";
}
public void testAddJob(){
try {
// ScheduleTask task = taskService.addTask("新建任务", "com.ims.scheduler.MyTask", "exe", "0/1 * * * * ?");
// ScheduleTask task = taskService.addTask("新建任务", "com.ims.scheduler.MyTask", "0/1 * * * * ?");
int result = taskService.addTask("新建任务", "com.ims.scheduler.MyTask", "0/1 * * * * ?");
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
public LoginInfo getLoginInfo() {
return loginInfo;
}
public void setLoginInfo(LoginInfo loginInfo) {
this.loginInfo = loginInfo;
}
}
参考文献:
http://sulaohuai.blog.51cto.com/10674946/1702625