java - 在 Java 中实现线程级请求执行上下文
问题描述
我们在 Tomcat 8 之上使用 Java Web 应用程序。Web 应用程序中任何 API 的控制流是:
Servlet -> 服务层 -> DAO/DB 层
现在我们希望在服务/DAO 层中填充一些有关请求执行的信息,这些信息将在 Servlet 层中使用(这是设计使然,因此无法更改)。
一种方法是在 servlet 中创建一个 ThreadLocal 并将其传递给所有层,但这需要更改方法签名,因此对我们的应用程序来说是相当侵入性的更改。
另一种方法是通过保留一个静态映射来实现类似threadLocal的东西,其中key是threadID,value是一个列表。任何层都可以写入/附加到该 threadID 的映射,并在请求结束时由顶层读取。
有没有其他方法可以做到这一点?
编辑 1- 有关设置的更多信息
顶层有一个节流拦截器,它需要知道每个请求由下游层填充的两件事:
- DAO 层已知的消耗的操作(例如 DynamoDB IOPS 等)。
- 请求是否被限制。
此信息在token bucket
节流引擎中更新。
解决方案
推荐阅读
- javascript - 如何将 JS JSON 响应红色中的负数变为红色?
- json - 如何在大型 json 文件中获取日期字段的最大值?
- node.js - 如何将额外数据附加到 WebSocket 连接,以便我可以在断开连接时进行清理
- php - 无法从视图中的函数访问变量
- javascript - 单击包含 svg 的 span 标签内的按钮?
- php - 如何在不丢失行的情况下将 CSV 文件中的数据插入 mysql 数据库?
- php - 无法使用 Composer 创建项目
- hyperledger-fabric - 我找不到附加日志中出现“使用组织 1”的原因。在 bash shell 脚本中,哪个命令行使它出现?
- python - 从 all 中删除所有and标签使用 BeautifulSoup 或 re 的类的标签
- html - 如何在 CSS Grid 中将孙元素之一跨越到 100% 宽度