基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。
需要在配置类上添加@EnableScheduling 表示开启定时任务, 如果想关闭定时任务,注释掉这个注解就行了.
任务类加注解@Component ,方法(该方法不能有参数)加@Scheduled (该注解有多种参数)
cron cron表达式
zone 定时任务执行的时区
fixedDelay和fixedDelayString 当前任务完成时,下一个任务延迟多久执行
fixedRate和fixedRateString 任务按固定频率执行
initialDelay和initialDelayString 延迟多少时间再开始执行第一次任务
注意事项 :
cron,fixedDelay,fixedDelayString 三者必须使用其中一种
cron 触发器不能和 initialDelay和initialDelayString 一起使用
1.毫秒为单位
这个案例是一秒执行一次定时任务.
@Component
@EnableScheduling //开启定时任务
public class ScheduledTasks {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 1000) /*单位是毫秒*/
public void reportCurrentTime() {
System.out.println("当前时间:" + dateFormat.format(new Date()));
}
}