Spring 3.0后提供Spring Task实现任务调度,支持按日历调度,相比Quartz功能稍简单,但是在开发基本够用,支 持注解编程方式。
串行任务
两个任务方法由一个线程串行执行,方法执行完成task2再执行。
1 在spring boot 启动类上添加注解: @EnableScheduling
测试代码:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author LYQ
* @since 2018/12/19 14:55
*/
@Component
public class TestTask {
@Scheduled(fixedRate = 3000)//每隔5秒执行一次
public void task1(){
System.out.println("定时任务测试1");
}
}
参数说明:https://www.jianshu.com/p/1defb0f22ed1
并行任务
多个任务由不同的线程在并行执行,互不影响。
@Configuration
@EnableScheduling
public class AsyncTaskConfig implements SchedulingConfigurer, AsyncConfigurer {
//线程池线程数量
private int corePoolSize = 5;
@Bean
public ThreadPoolTaskScheduler taskScheduler()
{
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.initialize();//初始化线程池
scheduler.setPoolSize(corePoolSize);//线程池容量
return scheduler;
}
@Override
public Executor getAsyncExecutor() {
Executor executor = taskScheduler();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setTaskScheduler(taskScheduler());
}
}
注意:将@EnableScheduling添加到此配置类上,SpringBoot启动类上不用再添加@EnableScheduling