欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > springboot 整合quartz定时任务

springboot 整合quartz定时任务

2025/2/22 2:07:46 来源:https://blog.csdn.net/weixin_44538590/article/details/142144497  浏览:    关键词:springboot 整合quartz定时任务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、pom的配置
    • 1.加注解
  • 二、使用方法
    • 1.工程图
    • 2.创建工具类
  • 三、controller 实现


前言

提示:这里可以添加本文要记录的大概内容:

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、pom的配置

 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>

1.加注解

@EnableScheduling
public class BusinessApplication {public static void main(String[] args) {SpringApplication.run(BusinessApplication.class, args);log.info("*********启动成功************");}}

二、使用方法

1.工程图

在这里插入图片描述

2.创建工具类

package com.juyuan.api.scheduled_tasks.pojo;import lombok.Data;@Data
public class QuartzBean {//任务名称private String jobID ;//执行任务类private String jobClass;//cron表达式private String cron;
}
package com.juyuan.api.scheduled_tasks.jop;import org.quartz.*;
import org.springframework.scheduling.quartz.QuartzJobBean;import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;public class SimpleTask extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException{JobDetail jobDetail = jobExecutionContext.getJobDetail();JobKey key = jobDetail.getKey();System. out.println("任务名称为:"+key.getName()+",执行时间为:"+ LocalDateTime.now());System.out.println("=======================添加数据===================================");}}
package com.juyuan.api.scheduled_tasks.utils;import com.juyuan.api.scheduled_tasks.pojo.QuartzBean;
import org.quartz.*;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;public class QuartzUtils {/**创建定时任务*@param scheduler 调度器*@param quartzBean 定时任务信息类*/@Beanpublic static void createScheduleJob(Scheduler scheduler, QuartzBean quartzBean){try {Class<? extends Job> aClass = (Class<? extends Job>) Class.forName(quartzBean.getJobClass());JobDetail build = JobBuilder.newJob(aClass).withIdentity(quartzBean.getJobID()).build();//表达式调度构建器CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(quartzBean.getCron());//按新的cronExpression表达式构建一个新的triggerCronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(quartzBean.getJobID()).withSchedule(cronScheduleBuilder).build();scheduler.scheduleJob(build,trigger);} catch (ClassNotFoundException | SchedulerException e) {throw new RuntimeException(e);}}/*根据任务恢复定时任务@param scheduler 调度器任务名称* param jobName*/public static void resumeScheduleJob(Scheduler scheduler, String jobName) {JobKey jobKey = JobKey.jobKey(jobName);try {scheduler.resumeJob(jobKey);} catch (SchedulerException e) {throw new RuntimeException("恢复定时任务失败" + e.getMessage());}}/*** 暂停定时任务*/public static void pauseScheduleJob(Scheduler scheduler, String jobName) {JobKey jobKey = JobKey.jobKey(jobName);try {scheduler.pauseJob(jobKey);} catch (SchedulerException e) {throw new RuntimeException("暂停定时任务失败" + e.getMessage());}}/*** 立即执行定时任务*/public static void runScheduleJob(Scheduler scheduler, String jobName) {JobKey jobKey = JobKey.jobKey(jobName);try {scheduler.triggerJob(jobKey);} catch (SchedulerException e) {throw new RuntimeException("立即执行定时任务失败" + e.getMessage());}}/*** 删除定时任务*/public static void deleteScheduleJob(Scheduler scheduler, String jobName) {JobKey jobKey = JobKey.jobKey(jobName);try {scheduler.deleteJob(jobKey);} catch (SchedulerException e) {throw new RuntimeException("删除定时任务失败" + e.getMessage());}}/*** 获取所有定时任务** @param scheduler 调度器* @return 返回所有定时任务列表*/public static List<JobDetail> getAllScheduleJob(Scheduler scheduler) {try {// 获取所有的JobKeysSet<JobKey> jobKeys = scheduler.getJobKeys(GroupMatcher.anyGroup());// 创建一个列表来存储所有的JobDetail对象List<JobDetail> jobDetails = new ArrayList<>();// 遍历每个JobKey,获取对应的JobDetailfor (JobKey jobKey : jobKeys) {JobDetail jobDetail = scheduler.getJobDetail(jobKey);jobDetails.add(jobDetail);}// 现在,jobDetails列表包含了所有的JobDetail对象// 您可以在这里对这些对象进行处理return jobDetails;} catch (SchedulerException e) {throw new RuntimeException("获取所有定时任务失败" + e.getMessage());}}/*** 获取所有正在运行的定时任务** @param scheduler 调度器* @return 返回所有正在运行的定时任务列表*/public static List<JobDetail> getRunningScheduleJob(Scheduler scheduler) {try {List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();List<JobDetail> jobDetails = new ArrayList<>();for (JobExecutionContext executingJob : executingJobs) {JobDetail jobDetail = executingJob.getJobDetail();jobDetails.add(jobDetail);}return jobDetails;} catch (SchedulerException e) {throw new RuntimeException("获取所有正在运行的定时任务失败" + e.getMessage());}}/*** 修改定时任务* @param scheduler 调度器*/public static void updateScheduleJob(Scheduler scheduler, QuartzBean quartzBean) {//获取对应的jobKeyTriggerKey triggerKey = TriggerKey.triggerKey(quartzBean.getJobID());//获取执行定时任务的执行方式CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzBean.getCron());try {//按新的cronExpression表达式重新构建triggerCronTrigger character= (CronTrigger)scheduler.getTrigger(triggerKey);character = character.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();//按新的trigger重新设置job执行scheduler.rescheduleJob(triggerKey, character);} catch (SchedulerException e) {throw new RuntimeException(e);}}}

三、controller 实现

package com.juyuan.api.scheduled_tasks.controller;import com.juyuan.api.park_enterprise_public_construction.entity.ActionPlan;
import com.juyuan.api.park_enterprise_public_construction.service.ActionPlanService;
import com.juyuan.api.scheduled_tasks.pojo.QuartzBean;
import com.juyuan.api.scheduled_tasks.utils.QuartzUtils;import com.juyuan.framework.common.constants.WebConstant;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class QuartzBeanController {private final String PATH = WebConstant.API_PATH + "/quartz/";@Autowiredprivate Scheduler scheduler;@Autowiredprivate ActionPlanService actionPlanService;//新增执行定时任务@GetMapping(value = PATH + "add")public void add() {List<ActionPlan> list = actionPlanService.list();for (ActionPlan actionPlan : list) {QuartzBean quartzBean = new QuartzBean();quartzBean.setJobID(actionPlan.getId());quartzBean.setJobClass("com.juyuan.api.scheduled_tasks.jop.SimpleTask");quartzBean.setCron(actionPlan.getFrequency());QuartzUtils.createScheduleJob(scheduler,quartzBean);}}//暂停执行定时任务@GetMapping(value = PATH + "pause")public void pause() {QuartzUtils.pauseScheduleJob(scheduler,"2");}//恢复执行定时任务@GetMapping(value = PATH + "resume")public void resume() {QuartzUtils.resumeScheduleJob(scheduler,"1");}//删除执行定时任务@GetMapping(value = PATH + "delete")public void delete() {QuartzUtils.deleteScheduleJob(scheduler,"2");}//立即执行定时任务@GetMapping(value = PATH + "run")public void run() {QuartzUtils.runScheduleJob(scheduler,"2");}//获取所有定时任务// 获取所有定时任务的接口@GetMapping(value = PATH + "queryAll")public void queryAll() {// 获取所有定时任务列表List<JobDetail> allScheduleJob = QuartzUtils.getAllScheduleJob(scheduler);// 遍历所有定时任务allScheduleJob.forEach(jobDetail -> {// 打印任务名称System.out.println(jobDetail.getKey().getName());// 打印任务组名// System.out.println(jobDetail.getKey().getGroup());// 打印任务描述// System.out.println(jobDetail.getDescription());// 打印任务类名// System.out.println(jobDetail.getJobClass());// 打印任务数据映射// System.out.println(jobDetail.getJobDataMap());});}//修改执行定时任务@GetMapping(value = PATH + "update")public void update() {QuartzBean quartzBean = new QuartzBean();quartzBean.setCron("0/5 * * * *?");quartzBean.setJobID("2");QuartzUtils.updateScheduleJob(scheduler,quartzBean);}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词