如何在 SpringBoot 2.1.2 中启用 ExecutorServiceMetrics?
Posted
技术标签:
【中文标题】如何在 SpringBoot 2.1.2 中启用 ExecutorServiceMetrics?【英文标题】:How to enable ExecutorServiceMetrics in SpringBoot 2.1.2? 【发布时间】:2019-10-04 05:19:13 【问题描述】:如何启用此处列出的 ExecutorServiceMetrics ?
https://github.com/micrometer-metrics/micrometer/blob/master/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/ExecutorServiceMetrics.java
SpringBoot 版本:2.1.2.RELEASE
在 /actuator/metrics 下,我可以看到 jvm 和其他一些开箱即用的自动配置指标,但看不到执行程序指标。
我试过设置这个,但没有成功。
management:
metrics:
enable.executor: true
感谢任何帮助。
【问题讨论】:
【参考方案1】:这是我解决它的方法(在 kotlin 中):
@EnableAsync
@Configuration
class AsyncConfig(
private val taskExecutorBuilder: TaskExecutorBuilder,
private val meterRegistry: MeterRegistry) : AsyncConfigurer
/**
* Add monitoring of executor using micrometer.
*/
override fun getAsyncExecutor(): Executor
// create executor based on default spring-boot properties
val executor = taskExecutorBuilder.build()
// we need to initialize it before calling monitor
executor.initialize()
// monitor the executor (so it is available in metrics) (must be wrapped)
return ExecutorServiceMetrics.monitor(meterRegistry, executor.threadPoolExecutor, "AsyncExecutor", "async")
所以基本上:
使用自动连线的TaskExecutorBuilder
,因此执行器是根据spring.task.execution.*
属性构建的
将线程池执行程序包装在ExecutorServiceMetrics
(来自io.micrometer.core
)中以获取指标
请注意,要使其正常工作,您必须返回已装饰的执行程序!
在此示例中,由于我给出了前缀 (async
),因此可用的指标是:
【讨论】:
【参考方案2】:我发现如果你想用 Spring Boot 锁定它,你必须手动完成。我正在使用 Spring Boot 2.2.9.RELEASE。
使用“applicationTaskExecutor”bean 创建一个 ExecutorServiceMetrics bean(这样,您可以获得之前配置的任何 bean 大小)。它会自动绑定。
类似:
@Bean
@ConditionalOnMissingBean
public ExecutorServiceMetrics executorServiceMetrics(@Qualifier("applicationTaskExecutor") ThreadPoolTaskExecutor applicationTaskExecutor)
return new ExecutorServiceMetrics(applicationTaskExecutor.getThreadPoolExecutor(), "applicationTaskExecutor",
Collections.emptyList());
【讨论】:
【参考方案3】:我能够在 Spring Boot 2.1.2.RELEASE 应用程序中获得 ExecutorServiceMetrics
报告指标,并且只需创建一个受监控的 ExecutorService
bean 即可。我无需向我的 application.yml
或 application.properties
添加任何内容即可完成这项工作。
例子:
@Configuration
public class ExecutorConfig
@Bean
public ExecutorService executorService(final MeterRegistry registry)
return ExecutorServiceMetrics.monitor(registry, Executors.newFixedThreadPool(20), "my executor", Tags.of("key", "value"));
然后,只需将您的 executorService
bean 连接到您的组件并将任务提交到该 executorService
bean。
【讨论】:
如果线程池超过1个怎么办以上是关于如何在 SpringBoot 2.1.2 中启用 ExecutorServiceMetrics?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 和 Angular 中启用 CORS
如何在 Spring Boot 中启用 H2 数据库服务器模式
使用resttemplate访问时,如何使端点仅接受springboot中启用@crossorigin的uri?为啥我没有收到 cors 错误? [复制]