需求:
- 在请求中获取图片下载时间信息,并在最后打印出来
- 我这边使用的是aop 的日志打印方式,也就是他是独立于代码逻辑之外的地方统一打印log
进程:
- 获取时间简单,只要在下载的前后做一个时间戳减一减就可以了问题是怎么把这个时间传递到最后
- 当然最简单的,包在一个地方一层层的传递上去,但是这个方法太麻烦了,而且很有可能会引发其他的bug
- 找到一个注释,@requestScop,加了这个注释之后,在整个请求链路上都唯一存在的bean 也就是生命周期就是单次请求,那完美符合我的要求
- 创建一个scop
import lombok.Data; import org.springframework.stereotype.Component; import org.springframework.web.context.annotation.RequestScope; @Component @RequestScope @Data public class RequestInitScope { private String requestId; private long downloadFileTime; }
- 在aop 和 下载图片的地方注入这个scop
//这个构造函数很重要 @RequiredArgsConstructor public class WebLogAspect { private static ObjectMapper mapper; private final RequestInitScope requestInitScope; 。。。。。。。 }
- 然后直接在对应的地方 调用 requestInitScope.getDownloadFileTime()
- 完美而优雅
拓展:
- 除了reqeustScope 还有 sessionScope,applicationScope
- 当使用@Async 的时候,requestScope 的注入会失败要注意做try catch
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)