启动了springboot之后就回发现每次执行的时间差是数据库中设定的定时任务
代码中添加的TriggerTask,目的是循环读取我们在数据库设置好的执行周期,以及执行相关定时任务的内容
插入之后
下面的方法中是用来lambda表达式
/**
* @ Author zhangsf
* @CreateTime 2019/5/1 - 4:54 PM
*/
package com.zsf.spider.controller;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.股票交易接口私募,股票交易接口私募,cronTrigger;
import static com.zsf.spider.util.DateUtil.now;
@Configuration //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务
public class DynamicScheduleTask implements SchedulingConfigurer {
@Mapper
public interface 股票交易接口私募,股票交易接口私募,cronMapper {
@Select('select cron from cron limit 1')
public String getCron();
}
@Autowired //注入mapper
@SuppressWarnings('all')
CronMapper cronMapper;
/**
* 执行定时任务
*/
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
//其中configureTasks()是需要执行的任务
() -> {System.out.println('执行动态定时任务: ' + now();
configureTasks();},
//2.设置执行周期(Trigger)
triggerContext -> {
//2.1 从数据库获取执行周期
String cron = cronMapper.getCron();
System.out.println('cron='+cron);
//2.2 合法性校验.
if (StringUtils.isEmpty(cron)) {
// Omitted Code ..
}
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
}
}
而且当我将数据库中执行的时间由5s改为了3s之后,并不需要重启springboot
注意:如果在数据库修改时格式出现错误,则定时任务会停止,即使重新修改正确;此时只能重新启动项目才能恢复。
文章为作者独立观点,不代表股票交易接口观点