Spring 如何在表batch\u step\u上下文的列(可能是字段)short\u上下文中添加额外信息?

Spring 如何在表batch\u step\u上下文的列(可能是字段)short\u上下文中添加额外信息?,spring,spring-batch,spring-batch-tasklet,Spring,Spring Batch,Spring Batch Tasklet,1.问题摘要 运行作业后,我会看到表batch_step_上下文,如图所示: 短上下文字段的最佳信息是: { "batch.taskletType": "com.a.b.job.config.BundleJobConfig$$Lambda$763/0x000000080070f840", "batch.stepType": "org.springframework.batch.core.step.taskle

1.问题摘要

运行作业后,我会看到表batch_step_上下文,如图所示:

短上下文字段的最佳信息是:

{
    "batch.taskletType": "com.a.b.job.config.BundleJobConfig$$Lambda$763/0x000000080070f840",
    "batch.stepType": "org.springframework.batch.core.step.tasklet.TaskletStep"
}
如何在其中添加额外信息

例如,作业完成后,我希望我的字段短\u上下文如下:

{
    "output": "hello world",
    "batch.taskletType": "com.a.b.job.config.BundleJobConfig$$Lambda$763/0x000000080070f840",
    "batch.stepType": "org.springframework.batch.core.step.tasklet.TaskletStep"
}
如何添加额外信息,如“输出”

2.我的部分代码

@配置
公共类AJobConfig{
私人最终JobBuilderFactory JobBuilderFactory;
私人最终StepBuilderFactory StepBuilderFactory;
@自动连线
公共AJobConfig(JobBuilderFactory JobBuilderFactory、StepBuilderFactory StepBuilderFactory){
this.jobBuilderFactory=jobBuilderFactory;
this.stepBuilderFactory=stepBuilderFactory;
}
@豆子
公共工作aJob(步骤aStep){
return jobBuilderFactory.get(“aJob”)
.启动(aStep)
.build();
}
@豆子
公共步骤aStep(){
返回stepBuilderFactory.get(“aStep”)
.tasklet((贡献,chunkContext)->{
System.out.println(“hi”);
返回RepeatStatus.FINISHED;
})
.build();
}
}

当我在这里找到一些有用的代码时,这是一个非常简单的问题

部分有用的代码是:

。。。
@凌驾
公共出口状态后步骤(步骤执行步骤执行){
fu.closeReader();
分步执行
.getJobExecution()
.getExecutionContext()
.put(“行”,此为“行”);
debug(“行读取器已结束”);
返回ExitStatus.COMPLETED;
}
...
它给了我很多启发

我需要做的只是在步骤中添加一个侦听器

这是我对aStep的最终代码:

。。。
@豆子
公共步骤aStep(){
返回stepBuilderFactory.get(“aStep”)
.tasklet((贡献,chunkContext)->{
System.out.println(“hi”);
返回RepeatStatus.FINISHED;
})
.listener(新步骤ExecutionListener(){
@凌驾
预处理前的公共无效(步骤执行步骤执行){
}
@凌驾
公共出口状态后步骤(步骤执行步骤执行){
分步执行
.getExecutionContext()
.put(“输出”、“你好世界”);
返回ExitStatus.COMPLETED;
}
})
.build();
}
...
当然,我在表batch\u step\u execution\u上下文中得到了我想要的东西


当我在这里找到一些有用的代码时,这是一个非常简单的问题

部分有用的代码是:

。。。
@凌驾
公共出口状态后步骤(步骤执行步骤执行){
fu.closeReader();
分步执行
.getJobExecution()
.getExecutionContext()
.put(“行”,此为“行”);
debug(“行读取器已结束”);
返回ExitStatus.COMPLETED;
}
...
它给了我很多启发

我需要做的只是在步骤中添加一个侦听器

这是我对aStep的最终代码:

。。。
@豆子
公共步骤aStep(){
返回stepBuilderFactory.get(“aStep”)
.tasklet((贡献,chunkContext)->{
System.out.println(“hi”);
返回RepeatStatus.FINISHED;
})
.listener(新步骤ExecutionListener(){
@凌驾
预处理前的公共无效(步骤执行步骤执行){
}
@凌驾
公共出口状态后步骤(步骤执行步骤执行){
分步执行
.getExecutionContext()
.put(“输出”、“你好世界”);
返回ExitStatus.COMPLETED;
}
})
.build();
}
...
当然,我在表batch\u step\u execution\u上下文中得到了我想要的东西


您也可以在步骤本身(如果这是步骤逻辑的一部分)中使用
chunkContext.getStepContext().getStepExecution().getExecutionContext().put(“输出”,“hello world”)。这不需要侦听器,但取决于您为您的用例选择合适的方法。您也可以在步骤本身中使用
chunkContext.getStepContext().getStepExecution().getExecutionContext().put(“输出”,“hello world”)。这不需要监听器,但取决于您为您的用例选择合适的方法。