我無法通過JConsole的修改我的MBean屬性修改ThreadPoolTaskExecutor類在運行時。我有一個調用的Threading bean:如何通過JMX
public static void main(String[] args) throws Exception {
// JMX
new SimpleJmxAgent();
// spring executor context
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"src/resources/ThreadContent.xml");
startThreads(ctx);
}
private static void startThreads(ApplicationContext ctx) {
TaskExecutor tE = (TaskExecutor) ctx.getBean("TaskExecutor");
System.out.println("Starting threads");
for (int i = 0; i < 10; i++) {
tE.execute(new RepeatingGrpPoC());
}
ThreadContent.xml包含所有默認屬性值。
SimpleJmxAgent樣子:
public SimpleJmxAgent() {
mbs = ManagementFactory.getPlatformMBeanServer();
// Spring context - used to load MBeans
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(
"resources/JMXcontent.xml"));
// Unique identification of MBeans
ThreadPoolManager threadBean = (ThreadPoolManager) factory.getBean("ThreadPoolBean");
ObjectName threadName = null;
try {
// Uniquely identify the MBeans and register them with the platform MBeanServer
threadName = new ObjectName("THREADING:name=ThreadBean");
mbs.registerMBean(threadBean, threadName);
} catch(Exception e) {
e.printStackTrace();
}
我有ThreadPoolManager從ThreadPoolTaskExecutor類inherting爲了給它訪問線程屬性的getter和setter方法,如: public void setCorePoolSize(int corePoolSize)
編輯:
我已經實施了使用:
public void setCorePoolSize(int corePoolSize){
super.setCorePoolSize(corePoolSize);
}
裹着:
public void changeCorePoolSize(int x){
setCorePoolSize(x);
}
所以現在的操作中出現的MBean標籤。然而,屬性顯示爲與正在使用的值不同的值。我已經在我的ThreadContext.xml中設置了
property name="corePoolSize" value="5"
但是,當查看屬性設置爲1(默認值)時。我可以通過changeCorePoolSize
操作通過Jconsole更改此操作,但只會改變所顯示的值的美觀效果,但不會更改仍在執行的正在進行的過程。
我失去了在我在做什麼東西嗎?什麼可能導致我通過ThreadContext.xml設置的屬性和顯示在Jconsole屬性中的屬性之間的斷開?
您好尼古拉, 我不復位的情況下運行。這只是當我檢查它在Jconsole上的值是1時的值。我認爲這是默認值。在Jconsole中可以觀察到5個TaskExecutor線程實例。那爲什麼不顯示5而不是1? – Will 2011-04-21 08:39:53