SpringTask 任务调度
2019-04-28 11:45
225 查看
面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>>
实现定时任务的方案如下:
1、使用jdk的Timer和TimerTask实现
可以实现简单的间隔执行任务,无法实现按日历去调度执行任务。
2、使用Quartz实现
Quartz 是一个异步任务调度框架,功能丰富,可以实现按日历调度。
3、使用Spring Task实现
Spring 3.0后提供Spring Task实现任务调度,支持按日历调度,相比Quartz功能稍简单,但是在开发基本够用,支持注解编程方式。
1. 串行任务
1.1 编写任务类
在Spring boot启动类上添加注解:@EnableScheduling
新建任务测试类TestTask,编写测试方法如下:
@Component public class ChooseCourseTask { private static final Logger LOGGER = LoggerFactory.getLogger(ChooseCourseTask.class); // @Scheduled(fixedRate = 5000) //上次执行开始时间后5秒执行 // @Scheduled(fixedDelay = 5000) //上次执行完毕后5秒执行 // @Scheduled(initialDelay=3000, fixedRate=5000) //第一次延迟3秒,以后每隔5秒执行一次 @Scheduled(cron="0/3 * * * * *")//每隔3秒执行一次 public void task1(){ LOGGER.info("===============测试定时任务1开始==============="); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } LOGGER.info("===============测试定时任务1结束==============="); } }
测试:
1、测试fixedRate和fixedDelay的区别
2、测试串行执行的特点
参考 task1方法的的定义方法,再定义task2方法,此时共用两个任务方法。
通过测试发现,两个任务方法由一个线程串行执行,task1方法执行完成task2再执行。
2. 并行任务
2.1 需求分析
在项目通常是需要多个不同的任务并行去执行。
2.2 配置异步任务
创建异步任务配置类,需要配置线程池实现多线程调度任务。
@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
相关文章推荐
- 任务调度 SpringTask 及入门小Demo
- 任务调度SpringTask
- Java Web系列-任务调度SpringTask
- 任务调度SpringTask
- SpringTask任务调度
- java任务调度
- Java定时任务调度简单实现
- Java Web应用中的任务调度
- 【niubi-job——一个开源的分布式任务调度框架】-----安装教程
- 分布式任务调度
- java 任务调度
- Quartz.Net实现定时任务调度
- Spark 任务调度之Submit Driver
- Quartz.NET 通过配置文件实现任务调度
- Spring4学习:任务调度和异步执行器之Quartz框架
- STM32F207+uCOS II 任务调度的问题
- Spark 任务调度之启动CoarseGrainedExecutorBackend
- 2017华为机试题--任务调度
- 嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
- Spring整合定时任务调度框架Quartz实