动态修改定时任务cron参数

  • 不需要重启应用就可以动态的改变Cron表达式的值
  • 不能使用@Scheduled(cron = “${jobs.cron}”)实现

DynamicScheduledTask.java

  1. package com.jege.spring.boot.task;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.scheduling.Trigger;
  6. import org.springframework.scheduling.TriggerContext;
  7. import org.springframework.scheduling.annotation.SchedulingConfigurer;
  8. import org.springframework.scheduling.config.ScheduledTaskRegistrar;
  9. import org.springframework.scheduling.support.CronTrigger;
  10. import org.springframework.stereotype.Component;
  11. import com.jege.spring.boot.data.jpa.entity.User;
  12. import com.jege.spring.boot.data.jpa.repository.UserRepository;
  13. /**
  14. * @author JE哥
  15. * @email 1272434821@qq.com
  16. * @description:动态修改定时任务cron参数
  17. */
  18. @Component
  19. public class DynamicScheduledTask implements SchedulingConfigurer {
  20. private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
  21. private static final String DEFAULT_CRON = "0/5 * * * * ?";
  22. private String cron = DEFAULT_CRON;
  23. @Autowired
  24. private UserRepository userRepository;
  25. @Override
  26. public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  27. taskRegistrar.addTriggerTask(new Runnable() {
  28. @Override
  29. public void run() {
  30. if (!cron.equals(DEFAULT_CRON)) {
  31. User user = new User("je_ge", 20);
  32. userRepository.save(user);
  33. }
  34. // 定时任务的业务逻辑
  35. System.out.println("动态修改定时任务cron参数,当前时间:" + dateFormat.format(new Date()));
  36. }
  37. }, new Trigger() {
  38. @Override
  39. public Date nextExecutionTime(TriggerContext triggerContext) {
  40. // 定时任务触发,可修改定时任务的执行周期
  41. CronTrigger trigger = new CronTrigger(cron);
  42. Date nextExecDate = trigger.nextExecutionTime(triggerContext);
  43. return nextExecDate;
  44. }
  45. });
  46. }
  47. public void setCron(String cron) {
  48. this.cron = cron;
  49. }
  50. }

Application.java

  1. @EnableScheduling

UserController.java

  1. @Autowired
  2. DynamicScheduledTask dynamicScheduledTask;
  3. // 更新动态任务时间
  4. @RequestMapping("/updateDynamicScheduledTask")
  5. @ResponseBody
  6. public AjaxResult updateDynamicScheduledTask() {
  7. dynamicScheduledTask.setCron("0/10 * * * * ?");
  8. return new AjaxResult().success();
  9. }

user.jsp

  1. updateDynamicScheduledTask : function() {//动态修改定时任务
  2. $.get("/user/updateDynamicScheduledTask", function(data) {
  3. if (data.meta.success) {//动态修改定时任务成功
  4. $.messager.alert('成功提示', "请重新刷新数据,有插入新的数据", 'info');
  5. } else {
  6. $.messager.alert('错误提示', data.meta.message, 'error');
  7. }
  8. }, 'json');
  9. }
  10. <a href="javascript:void(0)" class="easyui-linkbutton c8" iconCls="icon-search" data-url="updateDynamicScheduledTask">动态修改定时任务</a>

其他关联项目

源码地址

https://github.com/je-ge/spring-boot

如果觉得我的文章对您有帮助,请打赏支持。您的支持将鼓励我继续创作!谢谢!



Spring Boot 系列教程14-动态修改定时任务cron参数的更多相关文章

  1. Spring Boot 系列教程15-页面国际化

    internationalization(i18n) 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式. 它要求从产品中抽离所有地域语言,国家/地区和 ...

  2. Spring Boot 系列教程7-EasyUI-datagrid

    jQueryEasyUI jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要 ...

  3. Spring Boot 系列教程11-html页面解析-jsoup

    需求 需要对一个页面进行数据抓取,并导出doc文档 html解析器 jsoup 可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操 ...

  4. Spring Boot 系列教程10-freemarker导出word下载

    freemarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个 ...

  5. Spring Boot 系列教程8-EasyUI-edatagrid扩展

    edatagrid扩展组件 edatagrid组件是datagrid的扩展组件,增加了统一处理CRUD的功能,可以用在数据比较简单的页面. 使用的时候需要额外引入jquery.edatagrid.js ...

  6. Spring Boot 系列教程19-后台验证-Hibernate Validation

    后台验证 开发项目过程中,后台在很多地方需要进行校验操作,比如:前台表单提交,调用系统接口,数据传输等.而现在多数项目都采用MVC分层式设计,每层都需要进行相应地校验. 针对这个问题, JCP 出台一 ...

  7. Spring Boot 系列教程18-itext导出pdf下载

    Java操作pdf框架 iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好 ...

  8. Spring Boot 系列教程17-Cache-缓存

    缓存 缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找.由于缓存的运行速度比内存快得多,故缓存的作用就是帮 ...

  9. Spring Boot 系列教程16-数据国际化

    internationalization(i18n) 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式. 它要求从产品中抽离所有地域语言,国家/地区和 ...

随机推荐

  1. SSL单向认证和双向认证原理

    注:本文为个人学习摘录,原文地址:http://edison0663.iteye.com/blog/996526 为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议.SSL ...

  2. [POJ] 1562 Oil Deposits (DFS)

    Oil Deposits Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16655   Accepted: 8917 Des ...

  3. LeetCode OJ 1. Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  4. 洛谷-小鱼会有危险吗-BOSS战-入门综合练习2

    题目描述 Description 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%.有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测 ...

  5. 修改textField的placeholder的字体和颜色

    textField.placeholder = @"username is in here!"; [textField setValue:[UIColor redColor] fo ...

  6. table可更改th大小的jQuery插件

    (function ($) { $.fn.resizetable = function () { var tableObj = $(this); var inResizeRange = false; ...

  7. python基础(三)--列表、元组、字典

    一.列表: 有序序列,支持索引.切片.循环(for,while) 元素可以被修改: 元素可以是任何数据类型(数字,字符串,列表,布尔值...),可以嵌套: ##增 1.append(object)   ...

  8. C/C++宏定义中#与##区别 .

    // #表示:对应变量字符串化// ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符 #define U_BOOT_CMD_MKENT_COMPLETE(name,maxa ...

  9. HDU 4329 MAP(stringstream的用法)

    这个题目有点绕,但是按着他的意思写不难模拟出来.本来是一场学弟们的训练赛,我这个学长在赛场上却WA了四次都没过,三条黑线就一直在我的脑袋上挂着... 赛后开始找原因,后来发现题目看错了,1/R中的R是 ...

  10. chrome插件:打开新tab时自动打开百度

    下载 安装: 解压到某一目录 如要修改自动跳转链接:修改go.js中的url (function (){ chrome.tabs.getCurrent(function(tab){ chrome.ta ...