Java 如何在Spring中为每个请求设置全局变量?

Java 如何在Spring中为每个请求设置全局变量?,java,spring,multithreading,performance,static,Java,Spring,Multithreading,Performance,Static,我正在使用Spring框架翻译一个基于REST的应用程序。现在我需要根据请求的语言翻译一些响应。例如: /get-me-an-answer/?lang=es Spanish /get-me-an-answer/?lang=en English /get-me-an-answer/?lang=fr French 我将变量language\u code作为名为Translang class Translang { ... public static String langu

我正在使用Spring框架翻译一个基于REST的应用程序。现在我需要根据请求的语言翻译一些响应。例如:

/get-me-an-answer/?lang=es Spanish
/get-me-an-answer/?lang=en English
/get-me-an-answer/?lang=fr French
我将变量
language\u code
作为名为
Translang

    class Translang {
...
        public static String language_code = null;
...
    }
问题在于多线程,当一个新的请求出现时,它会改变语言,如果另一个先前的请求正在执行,它可能会用修改过的语言而不是它所请求的原始语言来回答


这就是我的问题的原因:如何在Spring中为每个请求设置一个全局变量来避免这个问题?

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

这似乎就是您正在寻找的,因为请求是由一个单独的线程执行的

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


为什么你需要一个静态变量,你可以正确处理url参数?是的,我可以,但我可能会传递多个方法,我想避免这种工作负载,只是希望使用它的方法访问静态变量,或者我怎么做?你应该继续传递它,因为Rest是无状态的,当你设置状态时(类似语言)会出现奇怪的结果。您应该只将值传递给基础方法。有关获取用户语言的更好方法,请参阅。这支持标准的
接受语言
标题。虽然此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。Lin如果链接页面发生变化,k-only答案可能无效。-听起来很合理,在原始答案中添加了更多细节。