spring实现对quartz的动态增删改及启动、停止操作

Quartz+spring任务调度 一、到官网下载quartz相应的压缩包,maven引用如下:                <!-- 添加quartz定时任务包 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> ... 阅读详情

通过spring的这里用到spring的 org.springframework.scheduling.quartz.SchedulerFactoryBean 可以轻松实现对quartz中定时任务的管理。(quartz的集成见:http://lfwer.iteye.com/admin/blogs/2426954)

这里直接上代码:

package com.eversec.mastersp.business.action;  
  
import io.swagger.annotations.Api;  
import io.swagger.annotations.ApiOperation;  
import org.quartz.*;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.scheduling.quartz.SchedulerFactoryBean;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  
import org.springframework.web.bind.annotation.RequestParam;  
import org.springframework.web.bind.annotation.ResponseBody;  
  
@Controller  
@RequestMapping("/quartz")  
@Api(value = "quartz定时任务管理")  
public class QuartzManagerAction {  
  
    @Autowired  
    private SchedulerFactoryBean schedulerFactory;  
  
    /** 
     * @param jobName          任务名 
     * @param jobGroupName     任务组名 
     * @param triggerName      触发器名 
     * @param triggerGroupName 触发器组名 
     * @param jobClass         任务 
     * @param cron             时间设置,参考quartz说明文档 
     * @Description: 添加一个定时任务 
     */  
    @SuppressWarnings({"unchecked", "rawtypes"})  
    @ApiOperation(value = "添加一个定时任务")  
    @RequestMapping(value = "/addJob", method = RequestMethod.POST)  
    @ResponseBody  
    public Boolean addJob(@RequestParam String jobName, @RequestParam(required = false) String jobGroupName,  
                       @RequestParam String triggerName, @RequestParam(required = false) String triggerGroupName, @RequestParam Class jobClass, @RequestParam String cron) {  
        boolean result = false;  
        try {  
            Scheduler sched = schedulerFactory.getScheduler();  
            // 任务名,任务组,任务执行类  
            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();  
  
            // 触发器  
            TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();  
            // 触发器名,触发器组  
            triggerBuilder.withIdentity(triggerName, triggerGroupName);  
            triggerBuilder.startNow();  
            // 触发器时间设定  
            triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));  
            // 创建Trigger对象  
            CronTrigger trigger = (CronTrigger) triggerBuilder.build();  
  
            // 调度容器设置JobDetail和Trigger  
            sched.scheduleJob(jobDetail, trigger);  
  
            // 启动  
            if (!sched.isShutdown()) {  
                sched.start();  
            }  
  
            result = true;  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
        return result;  
    }  
  
    /** 
     * @param jobName 
     * @param jobGroupName 
     * @param triggerName      触发器名 
     * @param triggerGroupName 触发器组名 
     * @param cron             时间设置,参考quartz说明文档 
     * @Description: 修改一个任务的触发时间 
     */  
    @ApiOperation(value = "修改一个任务的触发时间")  
    @RequestMapping(value = "/modifyJobTime", method = RequestMethod.POST)  
    @ResponseBody  
    public Boolean modifyJobTime(@RequestParam String jobName,  
                              @RequestParam(required = false) String jobGroupName, @RequestParam String triggerName, @RequestParam(required = false) String triggerGroupName, @RequestParam String cron) {  
        boolean result = false;  
        try {  
            Scheduler sched = schedulerFactory.getScheduler();  
            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);  
            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);  
            if (trigger == null) {  
                return result;  
            }  
  
            String oldTime = trigger.getCronExpression();  
            if (!oldTime.equalsIgnoreCase(cron)) {  
                /** 方式一 :调用 rescheduleJob 开始 */  
                // 触发器  
                TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();  
                // 触发器名,触发器组  
                triggerBuilder.withIdentity(triggerName, triggerGroupName);  
                triggerBuilder.startNow();  
                // 触发器时间设定  
                triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));  
                // 创建Trigger对象  
                trigger = (CronTrigger) triggerBuilder.build();  
                // 方式一 :修改一个任务的触发时间  
                sched.rescheduleJob(triggerKey, trigger);  
                /** 方式一 :调用 rescheduleJob 结束 */  
  
                /** 方式二:先删除,然后在创建一个新的Job  */  
                //JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));  
                //Class<? extends Job> jobClass = jobDetail.getJobClass();  
                //removeJob(jobName, jobGroupName, triggerName, triggerGroupName);  
                //addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron);  
                /** 方式二 :先删除,然后在创建一个新的Job */  
                result = true;  
            }  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
        return  result;  
    }  
  
    /** 
     * @param jobName 
     * @param jobGroupName 
     * @param triggerName 
     * @param triggerGroupName 
     * @Description: 移除一个任务 
     */  
    @ApiOperation(value = "移除一个任务")  
    @RequestMapping(value = "/removeJob", method = RequestMethod.DELETE)  
    @ResponseBody  
    public Boolean removeJob(@RequestParam String jobName, @RequestParam(required = false) String jobGroupName,  
                          @RequestParam String triggerName, @RequestParam(required = false) String triggerGroupName) {  
        boolean result =false;  
        try {  
            Scheduler sched = schedulerFactory.getScheduler();  
  
            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);  
  
            sched.pauseTrigger(triggerKey);// 停止触发器  
            sched.unscheduleJob(triggerKey);// 移除触发器  
            sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务  
            result = true;  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
        return result;  
    }  
  
    /** 
     * @Description:启动所有定时任务 
     */  
//    @ApiOperation(value = "启动所有定时任务")  
//    @RequestMapping(value = "/startJobs",method = RequestMethod.GET)  
    public void startJobs() {  
        try {  
            Scheduler sched = schedulerFactory.getScheduler();  
            sched.start();  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
    }  
  
    /** 
     * @Description:关闭所有定时任务 
     */  
//    @ApiOperation(value = "关闭所有定时任务")  
//    @RequestMapping(value = "/shutdownJobs",method = RequestMethod.GET)  
    public void shutdownJobs() {  
        try {  
            Scheduler sched = schedulerFactory.getScheduler();  
            if (!sched.isShutdown()) {  
                sched.shutdown();  
            }  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
    }  
}  

比如要删除一个job,只需要这样调用:http://localhost:8080/lfwer/quartz/removeJob?jobName=xxJob&triggerName=xxTrigger。
因为我的groupName是默认的“DEFAULT”,所以不用传。

关于Spring boot中的Quartz配置启动开关问题(启动、停止) 最近在做一个项目,项目中有多个模块,总体构架为SpringBoot +Quartz+其他(其他的不是重点啦)。 问题提出: 项目中会有Quartz做的定时任务模块,至于怎么利用Quartz网上一搜一大把,在这里不再细讲, 我要说的是,在开发和实际部署环境中如何避免定时任务重复执行? 例如:项目开发完成后已经部署到服务器,但是后期肯定是需要维护的呀, 那么问题来了,你在本地开发环境启动项目... 阅读详情

相关推荐

spring和quartz的定时器的启动和停止例子

spring和quartz的定时器的启动和停止例子

一个Spring Scheduler (Quartz) 动态添加,删除,修改任务的例子

要求根据任务清单执行不定数量,不定频率的定时任务。并且需要动态添加,删除,修改任务。代码publicclassJobExample{ publicstaticvoidmain(String[]args)throwsException{ //Job的配置信息,可以从数据库或配置文件中获取 List<JobPa...

weixin_34111790的博客 705

ssm整合quartz定时任务实现动态增删改查,暂停任务,恢复任务

ssm整合quartz 并持久化到数据库中,实现动态增删改查,暂停任务,恢复任务等 将链接内的target文件直接放到项目ssmquartztest文件夹下 运行环境: jdk5+tomcat7+mysql+eclipse+maven lib jar包下载地址 地址1:链接:https://pan.baidu.com/s/1d3TveY 密码:g1t1 地址2:链接: https://pan.baidu.com/s/1dGoUgJv 密码: m7qx

quartz 常规增删改查方法

1.controller封装 @RestController @RequestMapping("/api") public class SchedulerJobController { private Logger logger = LoggerFactory.getLogger(SchedulerJobController.class); @Autowired private SchedulerJobService schedulerJobService; /**

qq_44691484的博客 608

Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务

Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务,原http://blog.youkuaiyun.com/phantomes/article/details/37880551博客的源码例子

spring quartz动态实现对任务的增删改查(可传参数)

        上一篇文章写到了关于定时任务的动态实现,在一些情况下,我们可能需要传参数来实现定时任务,直接贴代码了QuartzParamUtils,核心类package com.thinkgem.jeesite.modules.task.quartz.param; import java.util.HashMap; import java.util.List; import java.util...

csdn_sunlighting的博客 4196

Windows安装ros2(Jazzy版本+win10/win11)-4.构建ros2结点

这个位置也是ros2搜索package以及搜索node的路径, 如果把构建好的可执行文件乱动位置的话就找不到节点了,当然如果复制一个可执行文件以及可执行文件-script.py文件, ros2也就会认为你有一个新的节点了,运行这个拷贝的可执行文件程序都是ok的。由于上一个文章给powershell7也增加了启动执行ros2的环境初始化文件local_setup.ps1, 所以我们也可以直接在vscode中运行节点, 此种方式没有经由ros2托管, 缺少其他ros2的附加能力。

weixin_48398592的博客 7113

在spring中实现quartz的动态调度(开始、暂停、停止等)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/fantasic_van/article/details/74942062 需求: 需要在页面设定某个时间,然后点击按钮后,执行某个调度,并且可以在页面删除某个调度 1、导包 &lt;dependency&gt; &lt;groupId&gt;org.quartz-schedule...

xiang__liu的博客 8071

华为云Stack交付实战:从工勘到上线的全流程拆解

本文详细拆解华为云Stack交付全流程,从项目启动、工勘、LLD设计到硬件部署和软件安装,提供实战技巧与避坑指南。重点解析华为云Stack交付流程中的关键环节,如标准化工具使用、规范化文档管理和流程化协作,帮助团队高效完成从工勘到上线的复杂项目交付。

weixin_29243063的博客 156

ensp企业网综合实验(课程设计)

使用MSTP+VRRP技术实现负载均衡以及增加网络的可靠性;出口配置napt;所有用户均为自动获取IP地址;

qq_50829760的博客 1万+

springboot整合quartz实现定时任务的动态修改,启动,暂停等操作

一个定时任务调度框架,简单易用,功能强大可以使实现定时任务的。在项目开发过程当中,某些定时任务,可能在运行一段时间之后,就不需要了,或者需要修改下定时任务的执行时间等等。需要在代码当中进行修改然后重新打包发布,很麻烦。使用Quartz来实现的话不需要重新修改代码而达到要求。成功执行任务这种方式是写死在程序当中的,也存在修改不方便的情况!!!!!!

kkkkatoq的博客 2649

CANopen PDO 配置實戰:3步完成0x1800-0x1A00物件字典映射與事件觸發

本文详细解析CANopen PDO配置实战,通过3个关键步骤完成0x1800-0x1A00对象字典映射与事件触发设置。重点介绍COB-ID位域解析、映射参数配置及事件触发优化,帮助工程师实现工业自动化设备间毫秒级实时数据交换,提升系统通信效率。

weixin_33709609的博客 379

spring 定时器 表达式 org.springframework.scheduling.quartz.CronTriggerBean

一个Quartz的CronTrigger表达式分为七项子表达式: 其中每一项以空格隔开,从左到右分别是:秒,分,时,月的某天,月,星期的某天,年;其中年不是必须的,也就是说任何一个表达式最少需要六项! 例:0 0 12 ? * WED 表示每个星期三的12点执行,这里没有“年”这项! 字段名(项) 必须 值范围 特殊字符 秒 是 0-59 , - * / 分 是 0-59 , - * /...

好热 530

Ardupilot姿态控制详解(完结篇)

本文主要是对过去写的一些APM中姿态控制流程及函数博文的汇总。 按照之前写的博文以及个人认为的学习顺序,给出APM姿态控制器的学习顺序如下: APM姿态旋转理论基础 Ardupilot姿态控制器 PID控制流程(整定后的P控制器) 详解APM的开方控制器sqrt_controller Ardupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析 Ardupilot倾转分离函数thrust_heading_rotation_angles Ardupilot四元数姿态控制

moumde的博客 7024

YOLO26改进策略【卷积层】| DWRSeg :高效获取多尺度上下文信息,二次改进C3k2

本文记录的是利用DWR 模块改进 YOLO26 的特征提取部分。(Dilation-wise Residual)通过两步残差流程(区域残差化-语义残差化)与分支化空洞卷积结合,引导解码器处理特征与跳接特征的多尺度精准融合。本文利用模块,通过区域残差化生成简洁区域型特征图以简化融合基础,再通过分支化空洞卷积捕捉多尺度空间上下文,同时依托残差连接保留原始特征信息,对YOLO26中不同尺度目标特征进行针对性强化、抑制无效背景特征干扰,在特征融合阶段实现多尺度语义与细节信息的高效互补,避免传统多感受野卷积的冗余计算

Limiiiing的博客 159

找不到org.springframework.scheduling.quartz.SchedulerFactoryBean类

在spring整合quartz项目中,找不到org.springframework.scheduling.quartz.SchedulerFactoryBean类 解决方法之一 导入spring-context-support-4.2.4.RELEASE.jar包

小蜗牛的博客 8290

go实现MQTT broker(附完整源码)

go实现MQTT broker(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 575

SpringBoot学习日志之DAY13整合定时任务(基于Quartz框架实现定时任务的暂停,启动,单次执行和修改)

什么是Quartz? 一个定时任务调度框架,简单易用,功能强大。如果项目当中对定时调度要求较高,使用这个框架非常合适。 springboot整合Quartz定时调度框架 ...

光滑的秃头 1079

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

从零开始学Spring Boot

<img src="https://img-bss.youkuaiyun.com/202002270305259551.jpg" alt="" />

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【quartz】从数据库中读取配置实现动态定时任务

实现方式 1、定时任务表实体 2、反射调用scheduleJob中定义的方法 3、创建正常状态下的job执行工厂 4、若一个方法一次执行不完下次轮转时则等待改方法执行完后才执行下一次操作 5、创建需要运行的定时任务类 6、SpringBean工厂工具类 7、其他用到的工具类 字符串工具类 日志工具类 数据分析常量类 接口返回参数类 其中ResultEnum类如下: 8、sql语句 注释的很

qq_37634156的博客 5006

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Boot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除。

看了好多文章,都只讲了基础的demo用法,也就是简单的创建运行定时任务,对定时任务的管理却很少。我这里从0开始搭建一个简单的demo,包括定时任务的各种操作,以及API的一些用法,可以实现大多场景的需求。如: 普通定时任务的创建、启动、停止。 动态创建定时任务,如创建一个订单,5分钟后执行某某操作。 一、整个Quartz 的代码流程基本基本如下: 首先需要创建我们的任务(Job),比如取消订单、定时发送短信邮件之类的,这是我们的任务主体,也是写业务逻辑的地方。 创建任务调度器(Schedul..

毅呀毅呀哟 1万+

使用Spring Quartz做自动任务 启动和关闭

因开发需要做一个队自动任务的开关,网上的搜索的结果都不是很满意,考虑到spring本身使用的是单例模式,所以在springMVC中开发是最适合的。/** * 启动、关闭自动通过 * @author yangxujia * @throws Exception * @state start为开始,stop为暂停 * @date 2015年11月13日上午11:58:17 */

九天工作室 1万+

springboot整合quartz实现数据库动态配置

什么是Quzrtz? Quartz是一个开源任务调度框架,可以根据用户设定的时间规则来执行作业。简单来说,用户可以提前设定时间,规定好该时间所需要做的任务,当到达设定时间时,该任务便会按照原先定好的流程运行。 运用场景 1.定时轮询数据库同步 2.定时邮件通知 3.定时在线考试 4.等等 Quartz核心组件 任务:JobDetail Job(任务):是一个接口,可以通过实现该接口来定义需要执行的任务。 JobDetail是用来描述Job实现类以及相关静态信息,比如任务在scheduler中的任务名、组名等

三水沁 3047
上一篇: spring从3.1.0升级到4.2.7
下一篇: swagger2与spring的整合
lfwer
博客等级 码龄18年 8粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值