Spring batch 批处理作业完成时必须执行操作

Spring batch 批处理作业完成时必须执行操作,spring-batch,Spring Batch,我已经成功地实现了springbatch,但有一点我被卡住了。完成批处理作业后,我需要执行操作 我不能一步一步地执行这些操作,因为一旦工作完全完成,只有我可以这样做 我会告诉你这个场景, 步骤1:从读卡器中提取数据,在处理器中转换数据并写入数据库 第二步:从数据库中读取数据,应用逻辑,在处理器中转换并写入数据库 上述操作已完成,工作正常。完成上述步骤后,我必须将从api接收的数据与数据库中的数据进行比较,然后我必须从数据库中删除不属于api数据的记录。我不能将此作为一个步骤,因为来自api的数据

我已经成功地实现了springbatch,但有一点我被卡住了。完成批处理作业后,我需要执行操作

我不能一步一步地执行这些操作,因为一旦工作完全完成,只有我可以这样做

我会告诉你这个场景, 步骤1:从读卡器中提取数据,在处理器中转换数据并写入数据库

第二步:从数据库中读取数据,应用逻辑,在处理器中转换并写入数据库

上述操作已完成,工作正常。完成上述步骤后,我必须将从api接收的数据与数据库中的数据进行比较,然后我必须从数据库中删除不属于api数据的记录。我不能将此作为一个步骤,因为来自api的数据顺序并不总是相同的


我对Spring batch还不熟悉,试图找到一种方法,但未能得出结论。提前感谢。

正如Martin Hauner所说,
JobExecutionListener
将提供一个名为的钩子方法

还请注意,您应该在工作中注册侦听器

<job id="exampleJob">
    <step id="step1" />
    <step id="step2" />
    <listeners>
        <listener ref="yourJobListener" />
    </listeners>
</job>

<bean id="yourJobListener" class="com.example.job.listener.YourJobListener" />

//使用的弹簧靴+弹簧批处理2.x
//您的配置类{
@豆子
公共作业myjob(){
返回jobBuilderFactory.get(“myjob”)
.incrementer(新的RunIdIncrementer())
.flow(readData())
(完)
.listener(myjoblistener()).build();
}
@豆子
public JobExecutionListener myjoblistener(){
JobExecutionListener=新的JobExecutionListener(){
@凌驾
作业前公共无效(作业执行作业执行){
//TODO自动生成的方法存根
}
@凌驾
公共无效后作业(作业执行作业执行){
flatfiletoWrite=新哈希集();
试一试{
Files.write(path.get(“”),Arrays.asList(“foo”),
标准OpenOption.APPEND);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//sysout(“作业已完成”);
}
};
返回侦听器;
}

添加您的代码有助于其他人更好地理解您的需求,请在此处发布您的代码!我将讲述场景,步骤1:从读卡器中提取数据,在处理器中转换数据并写入数据库。步骤2:从数据库中读取数据,应用逻辑并在处理器中转换并写入数据库。以上操作已完成,并且正常运行好的。一旦完成上述步骤,我必须将从api接收到的数据与数据库中的数据进行比较,然后我必须从数据库中删除不属于api数据的记录。我不能作为一个步骤来执行此操作,因为api中的数据顺序并不总是相同的。请将上述详细信息添加到您的问题本身,因为其他人将丢失这些数据这些评论堆积如山!不清楚为什么你不能在一个步骤中运行比较。你可以使用
JobExecutionListener
在作业开始或结束时运行一些东西,但我想这也会有同样的问题。BPavanKumar MartinHauner-谢谢你,JobExecutionListener为我工作过,再次感谢。
 // used spring boot + spring batch 2.x

//your config class {

  @Bean
    public Job myjob() {
            return jobBuilderFactory.get("myjob")
             .incrementer(new RunIdIncrementer())
             .flow(readData())
             .end()
             .listener(myjoblistener()).build();
        }

    @Bean
        public JobExecutionListener myjoblistener() {

            JobExecutionListener listener = new JobExecutionListener() {

                @Override
                public void beforeJob(JobExecution jobExecution) {

                    // TODO Auto-generated method stub
                }

                @Override
                public void afterJob(JobExecution jobExecution) {

                    flatfiletoWrite = new HashSet<>();

                    try {
                        Files.write(Paths.get(""), Arrays.asList("foo"),
                                StandardOpenOption.APPEND);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    //sysout("Job has been completed");
                }
            };

            return listener ;
        }