播放框架 - 保证本地线程在请求结束或下一个请求开始时被清除
Posted
技术标签:
【中文标题】播放框架 - 保证本地线程在请求结束或下一个请求开始时被清除【英文标题】:Play framework - guarantee a thread local gets cleared at end of request or beginning of next request 【发布时间】:2012-04-18 18:46:04 【问题描述】:我们正在使用本地线程来为 WS(Web 服务)库提供一种“一级缓存”,以便在给定请求中对同一 URI 的调用只发生一次。目前我正在使用 @Before 过滤器来确保在任何给定的请求开始之前我们清除本地线程中的任何内容,因为 play 似乎保留了它们的池。
有没有比在我们的基本控制器上执行 @With(MyThreadLocalKillingFilter.class) 更好的方法来实现这一点?它有效,但看起来很hackish。
请注意,我们使用的是服务器内置的播放,从播放开始/运行开始
【问题讨论】:
【参考方案1】:在你的控制器中使用@With 这种方式没有什么骇人听闻的东西。我认为这是相当普遍的。这被认为是比扩展基本控制器更好的做法。
您可能需要小心使用 ThreadLocals,特别是在使用暂停请求执行线程的 Promise 时。
【讨论】:
我只是讨厌你必须记住这样做。这是一个跨领域的问题,不应该出现在每个控制器上。也意识到使用 ThreadLocals 的潜在问题我想知道框架本身是如何处理这个问题的,因为它在请求、会话等所有地方都使用 ThreadLocals。以上是关于播放框架 - 保证本地线程在请求结束或下一个请求开始时被清除的主要内容,如果未能解决你的问题,请参考以下文章
吃透Redis:网络框架篇-redis 6.0 IO多线程原子性保证
吃透Redis:网络框架篇-redis 6.0 IO多线程原子性保证