使用 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_VAL
eaa81b53-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
,我需要从中获取作业执行的结果,包括 BatchStatus
、ExitStatus
等来构建我的响应对象.
我的问题是,如何从提供的这个参数值中查询以获取 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);
假设有一个 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_VAL
eaa81b53-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
,我需要从中获取作业执行的结果,包括 BatchStatus
、ExitStatus
等来构建我的响应对象.
我的问题是,如何从提供的这个参数值中查询以获取 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);