1,静态定时任务
1,创建静态定时任务类,位置放在启动类同级目录或者子包下面,方便扫描到定时任务类上的注解。
2,静态定时任务类需要三个注解:@Configuration,标记该类为配置类
@EnableScheduling,标记类为定时任务类,@Scheduled(cron="0/30 * * * * ?"),//标记方法为定时任务,cron表达式: (0/30)从0秒开始,每隔30秒执行一次
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
* springboot设置静态的定时任务
*
*/
//标记配置类
@Configuration
//标记该类开启定时任务
@EnableScheduling
public class ScheduleTest {
//标记方法为定时任务
//cron表达式:(0/30)从0秒开始,每隔30秒执行一次
@Scheduled(cron="0/30 * * * * ?")
public void show (){
System.out.println("简单静态的定时任务!");
}
}
2,动态的定时任务
1,动态定时任务类需要两个注解和实现一个接口
@Configuration 和 @EnableScheduling
实现接口:SchedulingConfigurer // 接口的实现方法有多种,这里正式其中一种
2,动态定时任务类:
import com.example.top.demo.configure.ScheduleConfigure;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
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 java.util.Date;
@Configuration
@EnableScheduling
public class DymicSchedule implements SchedulingConfigurer {
/**
* 定时任务配置类
*/
@Autowired
private ScheduleConfigure scheduleConfigure;
/**
* 需要执行的任务函数
*/
protected void processTask(){
// 是否执行定时任务
if(Boolean.valueOf(scheduleConfigure.getIsSwitch())){
System.out.println("开始执行动态定时任务!");
}
}
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
// 添加触发器任务
scheduledTaskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
processTask();
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 任务触发,可修改任务的执行周期
CronTrigger trigger = new CronTrigger(scheduleConfigure.getCrom());
Date nextExec = trigger.nextExecutionTime(triggerContext);
return nextExec;
}
});
}
}
3,动态定时任务类:ScheduleConfigure
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ScheduleConfigure {
@Value("${task.switch}")
private String isSwitch ;
@Value("${task.cron}")
private String crom ;
public String getIsSwitch() {
return isSwitch;
}
public void setIsSwitch(String isSwitch) {
this.isSwitch = isSwitch;
}
public String getCrom() {
return crom;
}
public void setCrom(String crom) {
this.crom = crom;
}
}
4,相关yml文件配置
task:
taskName: 第一个配置任务
switch: true #是否开启定时任务
cron: "0/10 * * * * ?" #定时任务执行周期,cron表达式
总结:动态和静态定时任务的区别就是执行任务周期的cron表达式是在配置文件中还是代码中