上章(一)介绍定时任务xml配置,虽然可以配置多个定时任务,但是每次修改时间什么的都需要在xml里面改,这样不便于管理。 本章(二)主要实现动态增删改查定时任务,cron时间表达式,定时任务名称,定时器名都是以参数的形式。
- 环境jar包,jar包下载:http://download.csdn.net/detail/qq_22860341/9828157
2..xml配置(我配置在spring-mvc.xml)
<bean name ="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
3.代码实现(定时任务名,组名什么的可以页面设置名称,也可以设置成自增)
private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
private Scheduler scheduler;
public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
/**
* @Description: 添加一个定时任务
*
* @param jobName
* 任务名(可以页面设置名称,也可以设置成自增)
* @param jobGroupName
* 任务组名
* @param triggerName
* 触发器名
* @param triggerGroupName
* 触发器组名
* @param jobClass
* 任务
* @param time
* 时间设置,参考quartz说明文档(cron表达式时间)
* @param stime
* 定时任务开始时间
* @param etime
* 定时任务结束时间
*/
public static void addJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName, Class jobClass,
String time,String stime,String etime) {
try {
Scheduler sched = schedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任务名,任务组,任务执行类
// 触发器
CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
trigger.setCronExpression(time);// 触发器时间设定
if(!"".equals(stime)){
Date s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(stime);
trigger.setStartTime(s);
}
if(!"".equals(etime)){
Date e = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(etime);
trigger.setStartTime(e);
}
sched.scheduleJob(jobDetail, trigger);
sched.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description: 修改一个任务的触发时间
*
* @param triggerName
* @param triggerGroupName
* @param time
*/
public static void modifyJobTime(String triggerName,
String triggerGroupName, String time) {
try {
Scheduler sched = schedulerFactory.getScheduler();
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,
triggerGroupName);
if (trigger == null) {
return;
}
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(time)) {
CronTrigger ct = (CronTrigger) trigger;
// 修改时间
ct.setCronExpression(time);
// 重启触发器
sched.rescheduleJob(triggerName, triggerGroupName, trigger);
}
} 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 = schedulerFactory.getScheduler();
sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器
sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器
sched.deleteJob(jobName, jobGroupName);// 删除任务
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description:启动所有定时任务
*/
public static void startJobs() {
try {
Scheduler sched = schedulerFactory.getScheduler();
sched.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Description:关闭所有定时任务
*/
public static void shutdownJobs() {
try {
Scheduler sched = schedulerFactory.getScheduler();
if (!sched.isShutdown()) {
sched.shutdown();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
4.定时任务执行类,添加定时任务的具体业务类,实现Job类。
public class QuartzJobController implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
CronTrigger trigger = (CronTrigger) context.getTrigger(); //获取当前定时任务的定时器
String jobname = trigger.getJobName();
//具体业务实现
}
}
5,jsp页面参考
可以参考百度cron表达式 http://cron.qqe2.com/ 源码下载地址http://download.csdn.net/detail/qq_22860341/9828074
6,本人的定时任务页面,根据上图所来,可以根据它的规则拼接,可以直接用,根据自己喜好和业务。介绍2种:
7.不懂的地方或者有好建议,有错误的地方欢迎指教QQ2118119173,欢迎打赏