使用RequestContextHolder.getRequestAttributes()的注意事项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用RequestContextHolder.getRequestAttributes()的注意事项相关的知识,希望对你有一定的参考价值。

参考技术A

注意事项:

在Spring Boot中,如果我们要获取当前Request实例,可以通过以下这个方法获取。

使用这种方法获取的时候需要注意使用多线程会出现些状况,例如一个请求过来后,请求达到Service方法,然后Service方法里另起一个线程启动,在该线程run方法里面想要通过以上方法可能获取不到Request实例。
且看RequestContextHolder内部分源码:

可看到之所以能通过静态方法getRequestAttributes获取Request实例,是因为ThreadLocal获取。一个请求到达容器后,Spring会把该请求Request实例通过setRequestAttributes方法 把Request实例放入该请求线程内ThreadLocalMap中,然后就可以通过静态方法取到。原理就是ThreadLocal,但ThreadLocal不能让子线程继承ThreadLocalMap信息,可以使用 InherbritableThreadLocal 实现子线程信息传递。
但Spring Boot 默认使用ThreadLocal把Request设置进请求线程中,这样如果在请求方法里面另起一个子线程然后再通过getRequestAttributes方法获取,是获取不到的。
所以要在能让子线程获取到,就可以使用InherbritableThreadLocal,看setRequestAttributes方法有这个布尔值可以设,至于在哪里设就没去深究。但个人认为最好不要修改该布尔值,默认就行,否则会有意向不到的可能

第一篇 用于测试使用

第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用第一篇 用于测试使用

以上是关于使用RequestContextHolder.getRequestAttributes()的注意事项的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)