使用 Batch Param 值查询 Spring Batch JobExecution

Querying Spring Batch JobExecution with Batch Param values

假设有一个 Spring 批处理 table 通过键值捕获所有作业执行参数:

create table BATCH_JOB_EXECUTION_PARAMS
(
    JOB_EXECUTION_ID BIGINT not null,
    TYPE_CD VARCHAR(6) not null,
    KEY_NAME VARCHAR(100) not null,
    STRING_VAL VARCHAR(250),
    DATE_VAL TIMESTAMP(26,6) default NULL,
    LONG_VAL BIGINT,
    DOUBLE_VAL DOUBLE,
    IDENTIFYING CHAR(1) not null,
    constraint JOB_EXEC_PARAMS_FK
        foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION
);

例如:

KEY_NAME correlationId
STRING_VALeaa81b53-7f7d-4637-9935-b765405756be

我可以查询以检索 JOB_EXECUTION_ID

SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION_PARAMS
WHERE KEY_NAME = 'correlationId' AND STRING_VAL = 'eaa81b53-7f7d-4637-9935-b765405756be'

然后我可以查询 BATCH_JOB_EXECUTION table 以获取作业执行的完整详细信息。

我有一个休息端点,客户端提供了这个 correlationId,我需要从中获取作业执行的结果,包括 BatchStatusExitStatus 等来构建我的响应对象.

我的问题是,如何从提供的这个参数值中查询以获取 JobExecution 对象?无论如何,我可以使用 JobExplorer 来做到这一点吗?

使用 org.springframework.batch.core.explore.JobExplorer 搜索作业执行。如果你有 executionId 你可以使用 getJobExecution.

这是一个由 SpringBatch 定义的 bean,因此您可以简单地将它自动连接到某处 @Autowired JobExplorer jobExplorer

还有findRunningJobExecutions等方法可以找到运行个职位。

您可以使用 JobRepository#getLastJobExecution(String jobName, JobParameters parameters):

Map<String, JobParameter> parameters = new HashMap<>();
parameters.put("correlationId", new JobParameter("eaa81b53-7f7d-4637-9935-b765405756be", true));
JobParameters jobParameters = new JobParameters(parameters);
JobExecution jobExecution = jobRepository.getLastJobExecution("myJob", jobParameters);