java - 如何在 Spring 中为每个请求提供一个全局变量?

标签 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_code 作为名为 Translang 的类中的静态变量

    class Translang {
...
        public static String language_code = null;
...
    }

问题在于多线程,当新请求到来时会更改语言,并且如果正在执行另一个先前的请求,则可能会以修改后的语言而不是其请求的原始语言进行回答。

这就是我的问题的原因:如何在每个请求的 Spring 中使用全局变量来避免此问题?

最佳答案

似乎ThreadLocal是您正在寻找的内容,因为每个请求是由单独的线程执行的。

This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable. ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).

关于java - 如何在 Spring 中为每个请求提供一个全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47457903/

相关文章:

java - 泛型<T extends Comparable<?的解释collection.sort/comparable 代码中的 super T>>?

java - 如何在Spring MVC中更新静态资源而不重建?

python - Thread.getName() 不代表实际的 worker 名称

c - pthread_rwlock的优先级?

java - 为 Spring Locale Interceptor 定义默认语言环境并处理异常

Java汽车动画平滑和走曲线

java - 数字的百分比

java - 属性继承?

spring - 如何阅读Spring框架源码?

JavaFX GUI因切换场景而卡住