您的位置:首页 > 编程语言 > Java开发

spring-boot+quartz实现web页面增删改定时任务

2017-08-28 09:46 731 查看
spring-boot集成quartz,支持在web页面中添加任务,暂停任务,继续执行任务,修改任务执行周期,测试任务,删除任务,以及quartz集群模式。

添加的任务需要实现Job接口,并有spring管理bean,例如DemoService,DemoService2

这个项目也集成了spring-data,可以用来写业务。

TaskUtil类实现了任务的增加,删除,修改,以及测试:

package com.htxa.wecare.util;

import com.htxa.wecare.StartWebApplication;
import com.htxa.wecare.model.CronTriggerWithState;
import com.htxa.wecare.model.TaskEntity;
import org.quartz.*;
import org.quartz.impl.StdScheduler;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

/**
* Description:
*
* @author <a href="mailto:erdongritian@foxmail.com">chenhao</a>
* Create Time: 2017/8/18 10:56
*/
@Component
public class TaskUtil {

@Resource
private StdScheduler stdScheduler;

public String addTask(TaskEntity taskEntity){
try {
JobDataMap map = new JobDataMap();
map.put("targetObject", taskEntity.getTaskService());
map.put("targetMethod", "execute");
JobDetail jobDetail = newJob(DetailQuartzJobBean.class).withIdentity(taskEntity.getTaskService())
.usingJobData(map).storeDurably().requestRecovery().build();

CronTrigger cronTrigger=newTrigger().forJob(jobDetail).withIdentity(taskEntity.getTaskService(), Scheduler.DEFAULT_GROUP)
.withDescription(taskEntity.getDescription())
.withSchedule(cronSchedule(taskEntity.getCronExpression())).build();
stdScheduler.scheduleJob(jobDetail,cronTrigger);
return "SUCCESS";
} catch (ObjectAlreadyExistsException e) {
e.printStackTrace();
return e.getMessage();
}catch (RuntimeException e) {
e.printStackTrace();
return e.getMessage();
} catch (SchedulerException e) {
e.printStackTrace();
return e.getMessage();
}catch (Exception e){
e.printStackTrace();
return e.getMessage();
}

}

public Boolean deleteTask(String triggerName){
try {
TriggerKey triggerKey=new TriggerKey(triggerName, null);
JobKey jobKey=new JobKey(triggerName,null);
stdScheduler.unscheduleJob(triggerKey);
stdScheduler.deleteJob(jobKey);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

public String modifySchedule(TaskEntity taskEntity){
try {
JobKey jobKey=new JobKey(taskEntity.getTaskService(),null);
JobDetail jobDetail=stdScheduler.getJobDetail(jobKey);

CronTrigger cronTrigger=newTrigger().forJob(jobDetail).withIdentity(taskEntity.getTaskService(), Scheduler.DEFAULT_GROUP)
.withDescription(taskEntity.getDescription())
.withSchedule(cronSchedule(taskEntity.getCronExpression())).build();

TriggerKey triggerKey=new TriggerKey(taskEntity.getTaskService(), null);
stdScheduler.rescheduleJob(triggerKey,cronTrigger);
return "SUCCESS";
} catch (ObjectAlreadyExistsException e) {
e.printStackTrace();
return e.getMessage();
}catch (RuntimeException e) {
e.printStackTrace();
return e.getMessage();
} catch (SchedulerException e) {
e.printStackTrace();
return e.getMessage();
}catch (Exception e){
e.printStackTrace();
return e.getMessage();
}
}

public Boolean pauseTase(String triggerName){
try {
TriggerKey triggerKey=new TriggerKey(triggerName, null);
stdScheduler.pauseTrigger(triggerKey);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
return false;
}
}

public Boolean resumeTask(String triggerName){
try {
TriggerKey triggerKey=new TriggerKey(triggerName, null);
stdScheduler.resumeTrigger(triggerKey);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
return false;
}
}

public List<CronTriggerWithState> getAllTask(){
List<CronTriggerWithState> list=new ArrayList<>();
try {
Set<TriggerKey> triggerKeys=stdScheduler.getTriggerKeys(GroupMatcher.anyTriggerGroup());
for(TriggerKey key:triggerKeys){
CronTriggerWithState trigger=new CronTriggerWithState();
trigger.setCronTrigger((CronTrigger) stdScheduler.getTrigger(key));
trigger.setStateName(stdScheduler.getTriggerState(key).name());
list.add(trigger);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}

public Boolean testTask(String taskService){
try {
Job job=(Job) StartWebApplication.applicationContext.getBean(taskService);
job.execute(null);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

}


代码链接:
点击打开链接

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring-boot quartz web