【问题标题】:The Value set in ThreadLocal for Spring JMX works inconsistently在 ThreadLocal 中为 Spring JMX 设置的值工作不一致
【发布时间】:2018-01-23 17:12:39
【问题描述】:

在 ThreadLocal 中为 Spring JMX 设置的值不一致

@ManagedResource(objectName = "MAN-TEST:name=SetValue", description = "Set Value for JMX")
@Component
public class ValueSetJMX {
    private static ThreadLocal<String> jmxValue = new ThreadLocal<String>();

    @ManagedAttribute
    public void setManValue(String valueJMX) {
    jmxValue.set(valueJMX)
    }

    @ManagedAttribute
    public String getManValue() {
            return jmxValue.get();
    }
}

在为 setManValue 设置值后,如果我多次调用 getManValue() ,结果有时会为空。

有没有更好的办法解决这个问题

【问题讨论】:

    标签: spring spring-boot concurrency thread-local spring-jmx


    【解决方案1】:

    我猜你的意思是远程设置/获取值。

    没有;您不能为此使用 ThreadLocal - 不能保证每个请求都会使用相同的 RMI 线程。

    【讨论】:

    • getManValue() 用于所有 JMX 操作(使用方面设置的全局值)如果两个用户操作这些 bean 并设置两个不同的值,那么这是一个问题,如何实现并发。
    • JMX 操作是离散的;如果不添加用户代码(并根据某些输入数据访问状态),则无法在调用之间存储状态。 ThreadLocal 只是不会削减它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2017-05-04
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多