首页 > 解决方案 > 在 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节流引擎中更新。

标签: javatomcat

解决方案


推荐阅读