Spring Boot实现动态更新任务的方法
程序员文章站
2024-02-27 18:08:03
前言
springboot 实现动态 job,可以通过 api 动态变更 cron。
原生的 job 实现起来很简单,只要用注解 @scheduled(cron=xxx...
前言
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 秒执行一次了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: Java实现的DES加密解密工具类实例
下一篇: java设计模式之简单工厂模式详解