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;
}
}
}
代码链接:
点击打开链接
添加的任务需要实现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;
}
}
}
代码链接:
点击打开链接
相关文章推荐
- Quartz+Spring Boot实现动态管理定时任务
- springboot整合quartz实现定时任务示例
- SpringBoot+quartz实现定时任务
- springboot整合Quartz实现动态配置定时任务的方法
- SpringBoot之旅 -- 定时任务两种(Spring Schedule 与 Quartz 整合 )实现
- springboot整合Quartz实现动态配置定时任务
- Spring Boot中实现Quartz动态定时任务
- Springboot整合Quartz实现动态配置定时任务
- springboot整合Quartz实现动态配置定时任务
- 搭建第一个web项目:quartz+spring实现定时任务
- springboot整合Quartz实现动态配置定时任务
- 关于Java Web 使用Spring中使用Quartz(定时调用、实现固定时间执行), 触发定时器(执行某些任务)的实例
- springboot整合Quartz实现动态配置定时任务
- SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法
- springboot整合Quartz实现动态配置定时任务
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
- springboot整合quartz实现定时任务
- spring boot 集成quartz 2.0 实现前端动态配置(获取spring上下文)的两种方式,启动数据库中已开启定时任务
- spring boot整合quartz实现多个定时任务的方法
- SpringBoot之旅 -- 定时任务两种(Spring Schedule 与 Quartz 整合 )实现