【发布时间】:2014-07-07 15:01:31
【问题描述】:
在 Play Framework 中,如果您的代码在 Future 中运行,它会从一个线程跳转到另一个线程。我有一个根据请求实例化的配置对象,需要存储在 Threadlocal 中。但是,当涉及 Future 时,Threadlocal 值不再一致。我们如何尝试使 Threadlocal 在请求的整个生命周期内保持一致,即使它在不同线程之间跳转?
谢谢
【问题讨论】:
-
鉴于 Play 是无状态的,您应该真正避免这种全局状态。如果您确实需要全局的东西(例如数据库连接池),我建议您创建一个插件并将其放在那里:playframework.com/documentation/2.3.x/ScalaPlugins
-
它不是真正的全局状态,它是每个请求的状态。如果每个请求都由单个线程处理,则使用 threadlocal 是有意义的。这里的问题是,对于异步请求,threadlocal 在请求的整个生命周期中并不一致。
-
如果它是按请求的,为什么它需要存储在任何地方?只需将它传递给需要该对象的任何函数。隐式参数对此很有用。
标签: multithreading asynchronous playframework-2.0 thread-local