2017-08-15 27 views
0

在ThreadLocal中春JMX設置的值工作不一致在ThreadLocal的春季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()多次,結果將是有時爲空。

有沒有解決這個

回答

2

我想你的意思是設置/遠程獲取價值的更好的方法。

否;您無法使用ThreadLocal - 不能保證每個請求都會使用相同的RMI線程。

+0

getManValue()用於所有JMX操作(使用方面設置的全局值)如果兩個用戶操作這些bean並設置兩個不同的值,那麼這是一個問題,爲此如何獲得併發性。 –

+0

JMX操作是離散的;您不能在不添加用戶代碼的情況下在調用之間存儲狀態(並根據某些輸入數據訪問狀態)。 'ThreadLocal'只是不會削減它。 –