【发布时间】:2019-04-30 09:10:39
【问题描述】:
我在 Spring Boot 项目中从 ThreadPoolExecutor 切换到 ThreadPoolTaskExecutor 只是因为根据它的文档:
This class is well suited for management and monitoring (e.g. through JMX)
我在我的配置类中创建了一个 ThreadPoolTaskExecutor 的 bean,如下所示:
@Bean
ThreadPoolTaskExecutor profileTaskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setThreadGroupName(getClass().getSimpleName());
taskExecutor.setCorePoolSize(corePoolSize);
taskExecutor.setMaxPoolSize(maxPoolSize);
taskExecutor.setKeepAliveSeconds(KEEP_ALIVE_MINUTES);
taskExecutor.setQueueCapacity(1);
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
return taskExecutor;
}
@Bean
protected MBeanExporter mbeanExporter() {
MBeanExporter exporter = new MBeanExporter();
Map<String, Object> beans = new HashMap<>();
beans.put("org.springframework.boot:type=Executors,name=ProfileServiceExecutor", profileTaskExecutor());
exporter.setBeans(beans);
return exporter;
}
这运行良好并通过 JMX 公开了我的 ThreadPoolTaskExecutor。现在的问题是,因为我正在创建一个新的 MBeanExporter,所以我的其他 ManagedOperations 被覆盖并且不会出现在 JConsole 中。现在我的问题是:
- 有没有办法将
ThreadPoolTaskExecutor添加到现有的托管bean。我试过了,但没有成功。 - 这是最有效的方法吗?没有任何注释可以放在上面的bean上吗?
@ManagedOperation不适用于方法级别。
【问题讨论】:
标签: spring spring-boot spring-jmx