Spring Boot实现动态更新任务的方法

发布时间 - 2026-01-11 00:53:30    点击率:

前言

SpringBoot 实现动态 Job,可以通过 API 动态变更 cron。

原生的 Job 实现起来很简单,只要用注解 @Scheduled(cron=xxxxxx) 来实现就可以了,但是要实现动态更改 cron ,就需要做点其他的了。

实现方法

在 pom.xml 中添加 quartz-scheduler

<dependency>
 <groupId>org.quartz-scheduler</groupId>
 <artifactId>quartz</artifactId>
 <version>2.2.3</version>
</dependency>

在 application.yml 中增加 cron ,默认一秒钟执行一次

cron:
 pattern: 0/1 * * * * ?

创建 DynamicScheduledTask.java

public class DynamicScheduledTask implements SchedulingConfigurer {
 @Value("${cron.pattern}")
 public String pattern;
 public void setCron(String cron) {
 this.pattern = cron;
 }
 @Override
 public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
 taskRegistrar.addTriggerTask(new Runnable() {
  @Override
  public void run() {
  doBiz();
  }
 }, new Trigger() {
  @Override
  public Date nextExecutionTime(TriggerContext triggerContext) {
  // 定时任务触发,可修改定时任务的执行周期
  CronTrigger trigger = new CronTrigger(pattern);
  Date nextExecDate = trigger.nextExecutionTime(triggerContext);
  return nextExecDate;
  }
 });
 }
 public void doBiz() {
 // do your biz
 System.out.println("do biz...");
 }
}

在 Application.java 中增加 @EnableScheduling 注解

这样,运行 Application.java 就会每隔一秒执行 Job 了。

如果要实现特定的逻辑,可以继承 DynamicScheduledTask.java,重写 doBiz() 方法。

UserDynamicJob.java

@Component
public class UserDynamicJob extends DynamicScheduledTask {
 @Autowired
 IUserService userService;
 @Override
 public void doBiz() {
 Map<String, Object> params = new HashMap<>();
 try {
  User user = userService.selectOne(params);
  System.out.println(user);
 } catch (DataNotFoundException e) {
  e.printStackTrace();
 }
 }
}

写到这里,其实还没有实现动态更改 cron 表达式。

接下来我们可以通过 api 来动态更改。

在我们的 Controller 中,增加一个方法

@PostMapping(value = "/cron")
 public String changeDynamicCron(String cron) {
 userDynamicJob.setCron(cron);
 return "Success";
 }

这样,通过调用 localhost:8080/corn?corn=0/10 * * * * ?

就可以实现每 10 秒执行一次了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# spring  # boot  # 动态任务  # 动态部署  # 动态加载  # Spring Boot 动态数据源示例(多数据源自动切换)  # SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法  # 详解Spring Boot中使用@Scheduled创建定时任务  # spring boot中使用@Async实现异步调用任务  # 详解SpringBoot定时任务说明  # 就会  # 还没有  # 其他的  # 我们可以  # 可以通过  # 很简单  # 重写  # 写到  # 这篇文章  # 谢谢大家  # 来实现  # 每隔  # 做点  # 就可以  # 只要用  # 在我们的  # 有疑问  # artifactId  # version  # application 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: iOS中将个别页面强制横屏其他页面竖屏  Laravel如何与Pusher实现实时通信?(WebSocket示例)  JS去除重复并统计数量的实现方法  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  如何在宝塔面板中修改默认建站目录?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  js代码实现下拉菜单【推荐】  大型企业网站制作流程,做网站需要注册公司吗?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速生成橙子建站落地页链接?  如何在腾讯云免费申请建站?  5种Android数据存储方式汇总  Laravel如何实现用户注册和登录?(Auth脚手架指南)  油猴 教程,油猴搜脚本为什么会网页无法显示?  java ZXing生成二维码及条码实例分享  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  iOS发送验证码倒计时应用  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何在万网主机上快速搭建网站?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  JS经典正则表达式笔试题汇总  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  html5的keygen标签为什么废弃_替代方案说明【解答】  如何快速搭建高效香港服务器网站?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何在 React 中条件性地遍历数组并渲染元素  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何在腾讯云服务器快速搭建个人网站?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Java解压缩zip - 解压缩多个文件或文件夹实例  Laravel怎么判断请求类型_Laravel Request isMethod用法  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  高端建站如何打造兼具美学与转化的品牌官网?  Laravel中的Facade(门面)到底是什么原理  公司网站制作需要多少钱,找人做公司网站需要多少钱?  无锡营销型网站制作公司,无锡网选车牌流程?  如何获取上海专业网站定制建站电话?  如何在阿里云完成域名注册与建站?  如何快速使用云服务器搭建个人网站?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】