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批处理实现定时关机操作详解
网页设计与网站制作内容,怎样注册网站?

