3.3 Spring Task并行任务
3.3.1 需求分析
在项目通常是需要多个不同的任务并行去执行。
本节实现Spring Task并行执行任务的方法。 3.3.2 配置异步任务
创建异步任务配置类,需要配置线程池实现多线程调度任务。
[AppleScript] 纯文本查看 复制代码 @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 3.3.3 测试
通过测试发现两个任务由不同的线程在并行执行,互不影响。
4.1 需求分析
定时任务发送消息流程如下:
1、每隔1分钟扫描一次任务表。
1、定时任务扫描task表,一次取出多个任务,取出超过1分钟未处理的任务
2、考虑订单服务可能集群部署,为避免重复发送任务使用乐观锁的方式每次从任务列表取出要处理的任务
3、任务发送完毕更新任务发送时间
关于任务表的添加:
正常的流程是订单支付成功向更新订单支付状态并向任务表写入“添加选课任务”。
目前订单支付功能没有开发,采用手动向任务表添加任务。
|