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


相关推荐: 三星、SK海力士获美批准:可向中国出口芯片制造设备  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  MySQL查询结果复制到新表的方法(更新、插入)  如何在服务器上配置二级域名建站?  想要更高端的建设网站,这些原则一定要坚持!  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  利用vue写todolist单页应用  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  微信小程序 input输入框控件详解及实例(多种示例)  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何处理异常和错误?(Handler示例)  如何快速搭建高效可靠的建站解决方案?  如何在阿里云虚拟主机上快速搭建个人网站?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  香港服务器部署网站为何提示未备案?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Python图片处理进阶教程_Pillow滤镜与图像增强  如何快速生成橙子建站落地页链接?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel如何优化应用性能?(缓存和优化命令)  Laravel如何使用Eloquent进行子查询  高防服务器租用首荐平台,企业级优惠套餐快速部署  Swift中swift中的switch 语句  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何快速生成ASP一键建站模板并优化安全性?  如何在建站之星绑定自定义域名?  如何用5美元大硬盘VPS安全高效搭建个人网站?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  bing浏览器学术搜索入口_bing学术文献检索地址  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  原生JS获取元素集合的子元素宽度实例  Laravel中的withCount方法怎么高效统计关联模型数量  iOS中将个别页面强制横屏其他页面竖屏  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  如何利用DOS批处理实现定时关机操作详解  网页设计与网站制作内容,怎样注册网站?