当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Boot实现动态更新任务的方法

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

前言

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 秒执行一次了。

总结

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网