@EnableScheduling :开启计划任务支持
在启动类或每个定时任务上面加都可以,就是一个是加一个注解就可以,一个是一个定时任务一个注解
@Scheduled:
1.cron:cron表达式,指定任务在特定时间执行;
2.fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms;
3.fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;
4.fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms;
5.fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String;
6.initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms;
7.initialDelayString:与initialDelay的含义一样,只是将参数类型变为String;
8.zone:时区,默认为当前时区,一般没有用到。
对于spring的@Scheduled,默认是单线程的,要是想实现多线程,这要重写scheduled的一个方法:
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.Executors;
/**
* @description:
* @email:
* @author:
* @createDate: 10:24 2018/6/19
*/
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
}
}
因为spring的@Scheduled注解支持前一个任务没有执行完是不会再次启动下一次任务的,所以我担心当设置成多线程是会出现混乱的情况,但是我本地测试是没有出现那种情况,@Scheduled还是保持了之前的那种特性。