如何在每个请求的Spring中有一个全局变量?

时间:2017-11-23 14:35:01

标签: java spring multithreading performance static

我正在使用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中有一个全局变量来避免这个问题?

2 个答案:

答案 0 :(得分:1)

似乎根据请求ThreadLocal是您要查找的内容由单独的线程执行。

  

此类提供线程局部变量。这些变量不同   来自他们的正常对应者,每个访问一个的线程   (通过其get或set方法)有自己的,独立初始化   变量的副本。 ThreadLocal实例通常是私有的   希望将状态与线程关联的类中的静态字段   (例如,用户ID或交易ID)。

答案 1 :(得分:0)

我建议实现导航抛出请求流的上下文,这样,您将在整个事务中传递此上下文,一旦拥有该域元素,您需要根据每个请求创建一个新的你收到了。目前你的类不是线程安全的,这可以修复也改变bean的范围。