条件为SpringBatch

时间:2018-07-27 09:13:14

标签: spring spring-batch

我在Spring Batch中有一个结构。 1. xmlItemReader读取xml,它有一个日期。日期一2.然后,有一个处理器应根据条件if (one <current)创建一个小于今天的日期列表。 3.然后将此列表写入txt文件。

1实现为

@Bean
    public ItemReader<Bic> reader() {
        FlatFileItemReader<Bic> reader = new FlatFileItemReader<Bic>();
        reader.setResource(new ClassPathResource("sample-data.xml"));
        reader.setLineMapper(new DefaultLineMapper<Bic>() {{
            setLineTokenizer(new DelimitedLineTokenizer() {{
                setNames(new String[]{"date"});
            }});
            setFieldSetMapper(new BeanWrapperFieldSetMapper<Bic>() {{
                setTargetType(Bic.class);
            }});
        }});
        return reader;
    }

3实现为

@Bean
public FlatFileItemWriter itemWriter() {
        return  new FlatFileItemWriterBuilder<Foo>()
                                   .name("itemWriter")
                                   .resource(new FileSystemResource("target/test/output.txt"))
                                   .lineAggregator(new PassThroughLineAggregator<>())
                                   .build();
}

如何根据步骤2中的条件实现处理器?

1 个答案:

答案 0 :(得分:1)

在不知道类结构的情况下,可能是以下情况:

  1. 创建新类,例如 MyProcessor.java 伪代码如下

    public class MyProcessor implements ItemProcessor<InputData, OutputData>{
    @Override
        public OutputData process(InputData item) throws Exception {
    
        if(item.checkingDate.isBefore(LocalDAteTime.now()){
             log.info("Skipping {}", item);
             return null;
        }
    
     //do your stuff
        return new OutputData();
    }
    

将处理器添加到作业配置中,例如:

@Bean
Step step1() {
    return stepBuilderFactory.get("step1")
            .listener(dataProcessor)
            .<InputData, OutputData>chunk(100)
            .faultTolerant()
            .reader(reader())
            .processor(new MyProcessor())
            .writer(itemWriter())
            .build();
}