最近在使用springboot的定时任务,一般都是基于注解的。 但是这种方式不够灵活, 不是动态的。 要是修改定时任务的话还要重启服务。很麻烦, 但是有没有一种可能,来实现动态的定时任务呢。 我们首先看一下Scheduling 的核心类, 这是核心类的配置。
我们看到他是一个funcation ,是一个函数式的编程 ,里面有一个task的方法, 里面是一个定时任务的注册器。 我们点击进去看一下源码
我们要添加一个一个自己的触发Task.
设计思路, 设计数据库 存放task 的Name, crom表达式,是否启用,
写一个task的抽象类, 实现runnAble , 在子类run 方法写自己的定时的业务代码, 里面还有一个抽象的taskName 的方法。
数据库的操作使用jpa
具体代码
这里面taskName 我写死了
类task1
类Task2
核心的Schedule的配置类
数据库的数据
这里taskName 要做唯一性约束,taskName 加唯一性约束就行,切不能为null.
这里task1 是2秒执行一次, task2 20秒执行一下。 我们先启动
以下看一下控制台日志
然后我们收到改一下,让他俩兑换一下再看一下控制台日志
我们看task2 已经变成2秒一次了,task1
和上一次的20秒之间相差20秒,这也生效了,完美。