我正在使用Spring Framework翻译基于REST的应用程序。现在我需要根据请求的语言翻译一些回复。例如:
/get-me-an-answer/?lang=es Spanish
/get-me-an-answer/?lang=en English
/get-me-an-answer/?lang=fr French
我将变量language_code
作为名为Translang
class Translang {
...
public static String language_code = null;
...
}
问题在于多线程,当一个新请求来改变语言时,如果另一个先前的请求正在执行,则可能用修改后的语言回答,而不是用它请求的原始语言回答。
这就是我的问题的原因:我如何在每个请求的Spring中有一个全局变量来避免这个问题?
答案 0 :(得分:1)
似乎根据请求ThreadLocal是您要查找的内容由单独的线程执行。
此类提供线程局部变量。这些变量不同 来自他们的正常对应者,每个访问一个的线程 (通过其get或set方法)有自己的,独立初始化 变量的副本。 ThreadLocal实例通常是私有的 希望将状态与线程关联的类中的静态字段 (例如,用户ID或交易ID)。
答案 1 :(得分:0)
我建议实现导航抛出请求流的上下文,这样,您将在整个事务中传递此上下文,一旦拥有该域元素,您需要根据每个请求创建一个新的你收到了。目前你的类不是线程安全的,这可以修复也改变bean的范围。