在Spring Batch上停止处理

时间:2016-01-13 16:55:12

标签: java spring spring-mvc spring-batch

我是Spring Batch的新手,我遇到了一些问题。 我有一个弹簧批处理步骤,它有一个阅读器,一系列带有2个处理器的项目处理器和一个写入器。当第一个处理器出现错误时,我想阻止第二个处理器运行。 我尝试使用StepExecutionListener返回ExistStatus.FAILED但没有成功。我还尝试添加一个ItemProcessListener来对onProcessError方法执行一些操作,但没有。 关于我该怎么做的任何想法?

以下是我用来配置步骤的代码。

import java.util.ArrayList;
import java.util.List;

import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.support.CompositeItemProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class StepConfig {

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private ItemReader<String> flatFileItemReader;

    @Autowired
    private ItemWriter<ResponseTO> itemWriter;

    @Bean
    public Step buildStep() {
              return stepBuilderFactory.get("step")
                .<String, ResponseTO> chunk(1)
                .reader(flatFileItemReader)
                .processor(chainOfItemsProcessors())
                .writer(itemWriter)
                .faultTolerant()
                .build();
    }

    private CompositeItemProcessor<String, ResponseTO> chainOfItemsProcessors() {
        CompositeItemProcessor<String,ResponseTO> compositeProcessor = new CompositeItemProcessor<>();
        List<ItemProcessor<?, ?>> itemProcessors = new ArrayList<>();
        itemProcessors.add(processor1);
        itemProcessors.add(processor2);
        compositeProcessor.setDelegates(itemProcessors);
        return compositeProcessor;
    }
}

0 个答案:

没有答案