是否有可用于捕获 Spring Batch 微观指标的示例代码?

Is there an sample code available to capture Spring Batch Micro Metrics?

正在开发一个 spring 启动批处理应用程序,想知道是否有关于如何获取 spring 批处理 document 中讨论的微指标的示例代码?

我正在寻找每次执行获取这些详细信息的方法。此外,由于我 运行 使用 cron 任务计划的应用程序,我们能否在每次执行时分离此数据?

找到解决方案

无需编码,一应俱全

在 pom 中包含执行器依赖项

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在 属性 文件中添加此行(而不是 * 您可以添加逗号分隔和安全性)refrence

management.endpoints.web.exposure.include=*

如果您的应用程序 运行 在端口 8080

http://localhost:8080/actuator/metrics/spring.batch.job 

将提供工作统计信息。您可以查询任何其他指标参数。 Reference

您可以通过

计算玉米任务计划中所有执行的指标

首先 创建自定义指标端点。

@Component
@Endpoint(id = "spring.batch.executions")
public class BatchMetricEndpoint {

    @Autowired
    BatchAllJobsMetricContext batchAllJobsMetricContext;

    @ReadOperation
    public Map<String, BatchPerJobMetricContext> features() {
        return batchAllJobsMetricContext.getAll();
    }
}

第二

Create a job listener

执行后进入本地指标端点。

@Component
public class BatchJobListener implements JobExecutionListener {

    @Autowired
    private MetricsEndpoint metricsEndpoint;

    @Autowired
    BatchAllJobsMetricContext batchAllJobsMetricContext;

    @Autowired
    BatchPerJobMetricContext batchPerJobMetricContext;

    @Override
    public void beforeJob(JobExecution jobExecution) {

    }

    @Override
    public void afterJob(JobExecution jobExecution) {
        MetricsEndpoint.MetricResponse metricResponse = metricsEndpoint.metric("spring.batch.job",null);
        
        String key = jobExecution.getJobParameters().getString("jobId");
        String execution = "Execution "+jobExecution.getJobParameters().getString("executionCout");
        if(batchAllJobsMetricContext.hasKey(key)){
           batchAllJobsMetricContext.get(key).put(execution,metricResponse);
        }else{
            batchPerJobMetricContext.put(execution,metricResponse);
            batchAllJobsMetricContext.put(key,batchPerJobMetricContext);
        }
        
    }

}

第三

利用本地指标聚合数据。

请注意,这种每次迭代保存指标的方式会占用大量内存,您希望保留一些限制并将此数据推送到时间序列数据源。

Sample code