20、21、22、23丨为什么框架层就要考虑分环境配置?异步处理为何要复制线程上下文信息?为你的接口添加Swagger文档;主流微服务框架概览
20
21 异步处理为何要复制线程上下文信息?
- Spring通过Java线程池原生支持异步操作。下图是Spring支持ThreadPoolTaskExecutor简单的原理简介。
- 内部其实是一个线程池加一个任务队列。调用方只管把任务提交给ThreadPoolTaskExecutor,任务会先进队列后台线程池观察到当前的负荷情况,如果有空闲线程就从队列中获取并执行任务,队列和线程池大小都是可以配置的。这是实现异步的标准做法。
-
在Spring Boot中配置一个异步线程池的bean很简单,下面是Account服务中的一个样例。
-
如果某个操作需要异步操作,那么只要在操作上加上@Async(),里面配置的参数要和前面配置的name一致
-
在Spring Boot中使用异步调用需要注意两点
- 首先调用方和被调用方的异步操作不能在同一个Bean中
- 线程上下文的拷贝