JConsole을 통해 내 MBean 속성을 수정하는 데 문제가 있습니다. 나는 다음과 같이 호출 된 스레딩 빈을 가지고있다 :jmx를 통해 런타임에 ThreadPoolTaskExecutor를 수정하는 방법
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은 모든 기본 속성 값을 포함한다. public void setCorePoolSize(int corePoolSize)
편집 : 나는 순서대로 ThreadPoolManager이 그것을 같은 스레드 속성의 getter와 setter 메소드에 대한 액세스 권한을 부여위한 ThreadPoolTaskExecutor에서 inherting이
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();
}
: 같은
SimpleJmxAgent 본다 :
나는 다음을 사용했다 :
는에 싸여 :
public void changeCorePoolSize(int x){
setCorePoolSize(x);
}
그래서 지금은 작동의 MBean 탭에 나타납니다. 그러나 속성은 사용되는 것과 다른 값으로 표시됩니다. 보기 속성이 디폴트 값을 1로 설정되어있을 때 나는
property name="corePoolSize" value="5"
그러나 내 ThreadContext.xml에 설정했습니다. changeCorePoolSize
작업을 통해 Jconsole을 통해이를 변경할 수 있지만 표시되는 값을 변경하는 화장품 효과 만 있지만 진행중인 프로세스는 여전히 변경되지 않고 여전히 5 TaskExecutor
스레드가 있습니다.
내가하고있는 일에 뭔가 빠졌습니까? ThreadContext.xml을 통해 설정하고 Jconsole의 속성에 표시되는 속성 사이의 연결을 끊을 수있는 원인은 무엇입니까?
안녕하세요 니콜라스, . 그것은 Jconsole에서 값을 확인할 때 단지 1 일 때 나타나는 것입니다. 기본값으로 생각됩니다. 그럼에도 불구하고 TaskExecutor 스레드의 5 가지 인스턴스가 Jconsole에서 관찰 될 수 있습니다. 그러면 왜 이것이 1이 아닌 5를 표시하지 않을까요? – Will