静态定时任务
何为静态
其实就是除非重启,要么别想再改任务周期规则了
使用方式
配置
配置文件yml中主要涉及定时任务的自定义配置如下
(还有其他属性,如需要也可自定义,这里定义只是为了注入值${schedule.cron},也可以在代码上编辑,不需要配置此内容):
schedule:
enabled: true
cron: "0 */10 * * * ?"
其中cron的表达式可以上网查询,这里表示每整10分钟就执行一次
第一种写法
定时任务配置类并执行
//配置类
@Configuration
//启用定时任务
@EnableScheduling
public class ScheduleTaskTest {
//读取yml配置文件中的schedule.cron
@Scheduled(cron = "${schedule.cron}")
private void configureTasks() {
System.err.println("定时任务启动时间: " + new Date(System.currentTimeMillis());
}
}
第二种写法
启动类上加上@EnableScheduling
单独再写一个定时任务
@SpringBootApplication
@EnableScheduling
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(GiszzReceiveApplication.class, args);
}
}
@Configuration
public class ScheduleTaskTest {
@Scheduled(cron = "${schedule.cron}")
public void run() {
System.err.println("定时任务启动时间: " + new Date(System.currentTimeMillis());
}
}
动态定时任务
何为动态
其实就是不需要重启,定时规则可以改变。主要基于数据库读取定时任务规则
使用方式
配置
要用到数据库,首先maven需要配置mysql驱动的依赖、mybatis等(自行百度这些依赖)
核心写法
//配置类
@Configuration
//启用定时任务
@EnableScheduling
public class ScheduleTaskTest implements SchedulingConfigurer {
@Autowired
TestMapper testMapper;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
//addTriggerTask方法的参数:Runnable task, Trigger trigger
scheduledTaskRegistrar.addTriggerTask(() -> System.out.println("执行定时任务"),
triggerContext -> {
//获取时间周期
String cron = testMapper.getCron();
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
}
}
这里数据库表设计省略
以上代码比较粗糙,有需要的人,可以进一步进行详细的填充和各种值的校验