# scaffold 项目之异步任务
# 简介
其实就是非阻塞的执行代码
在之前的 scaffold-spring-boot-starter-job 技术组件,除了提供定时任务的功能,还提供了 Async 异步任务的能力。系统使用异步任务,提升执行效率。例如说:
操作日志模块 ,异步记录【操作日志】
访问日志模块 ,异步记录【访问日志】
# 开始使用
# Async 配置
在 ScaffoldAsyncAutoConfiguration 配置类,设置使用 TransmittableThreadLocal,解决异步执行时上下文传递的问题。
@AutoConfiguration | |
@EnableAsync | |
public class ScaffoldAsyncAutoConfiguration { | |
@Bean | |
public BeanPostProcessor threadPoolTaskExecutorBeanPostProcessor() { | |
return new BeanPostProcessor() { | |
@Override | |
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { | |
if (!(bean instanceof ThreadPoolTaskExecutor)) { | |
return bean; | |
} | |
// 修改提交的任务,接入 TransmittableThreadLocal | |
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) bean; | |
executor.setTaskDecorator(TtlRunnable::get); | |
return executor; | |
} | |
}; | |
} | |
} |
说明:
@EnableAsync: 开启 spring Async 功能
executor.setTaskDecorator (TtlRunnable::get);: 设置任务执行器,指定要应用于任何即将执行的 Runnable 的自定义 TaskDecorator
# 引入依赖
<dependency> | |
<groupId>com.tz.boot</groupId> | |
<artifactId>scaffold-spring-boot-starter-job</artifactId> | |
</dependency> |
# 添加 @Async 注解使用
在要异步执行的方法上添加 @Async 注解
// 异步插入操作日志 | |
@Async | |
public void createOperateLog(OperateLog operateLog) { | |
OperateLogCreateReqDTO reqDTO = BeanUtil.copyProperties(operateLog, OperateLogCreateReqDTO.class); | |
operateLogApi.createOperateLog(reqDTO); | |
} |