春のバッチバッチ(6) - ItemProcessor

ItemProcessor


開発プロセスの後、私たちは多くの場合、データを読み取るために必要な、一連の操作を通じて、ビジネス・ロジック、および、書き込みデータ指定された永続化プロセスへ。春のバッチは、データ処理のための私達ItemProcessorインタフェースを提供します。

1.ItemProcessor:スプリングバッチプロセスデータ処理

2.ItemProcessorは、主にビジネスロジック、認証、フィルタリングなどに使用します

3.Springバッチは、I型を渡して、私たちItemProcessor <I、O>は、このインタフェースを提供し、その後、プロセッサのOによって処理されます

public interface ItemProcessor<I, O> {
    O process(I item) throws Exception;
}


私たちは、あなたがトラフィックを処理するために、複数のプロセッサのステップのために使用することができる、CompositeItemProcessor豆を構築することができます。
私たちは、豆を構築し、複数のプロセッサCompositeItemProcessorを保存し、その後ステップと結合することができます。

  @Autowired
    private JobBuilderFactory jobBuilderFactory;
 
    @Autowired
    private StepBuilderFactory stepBuilderFactory;
 
    @Autowired
    private DataSource dataSource;
 
    @Autowired
    private ItemProcessor<Customer, Customer> firstNameUpperCaseProcessor;
 
    @Autowired
    private ItemProcessor<Customer, Customer> idFilterProcessor;
 
    @Bean
    public Job processorDemoJob() throws Exception {
        return jobBuilderFactory.get("processorDemoJob")
                .start(processorDemoStep())
                .build();
 
    }
 
    @Bean
    public Step processorDemoStep() throws Exception {
        return stepBuilderFactory.get("processorDemoStep")
                .<Customer,Customer>chunk(100)
                .reader(dbJdbcDemoReader())
                .processor(processorDemoProcessor())
                .writer(flatFileDemoFlatFileWriter())
                .build();
    }
 
    @Bean
    public CompositeItemProcessor<Customer,Customer> processorDemoProcessor(){
        CompositeItemProcessor<Customer,Customer> processor = new CompositeItemProcessor<>();
			  // 多种处理方式
        List<ItemProcessor<Customer,Customer>> list = new ArrayList<>();
        list.add(firstNameUpperCaseProcessor);
        list.add(idFilterProcessor);
        processor.setDelegates(list);
        
        return processor;
    }
 
    @Bean
    @StepScope
    public JdbcPagingItemReader<Customer> dbJdbcDemoReader() {
        JdbcPagingItemReader<Customer> reader = new JdbcPagingItemReader<>();
 
        reader.setDataSource(this.dataSource);
        reader.setFetchSize(100);
        reader.setRowMapper((rs,rowNum)->{
            return Customer.builder().id(rs.getLong("id"))
                    .firstName(rs.getString("firstName"))
                    .lastName(rs.getString("lastName"))
                    .birthdate(rs.getString("birthdate"))
                    .build();
 
        });
 
        MySqlPagingQueryProvider queryProvider = new MySqlPagingQueryProvider();
        queryProvider.setSelectClause("id, firstName, lastName, birthdate");
        queryProvider.setFromClause("from Customer");
        Map<String, Order> sortKeys = new HashMap<>(1);
        sortKeys.put("id", Order.ASCENDING);
        queryProvider.setSortKeys(sortKeys);
 
        reader.setQueryProvider(queryProvider);
 
        return reader;
 
    }
 
    @Bean
    public FlatFileItemWriter<Customer> flatFileDemoFlatFileWriter() throws Exception {
        FlatFileItemWriter<Customer> itemWriter = new FlatFileItemWriter<>();
        String path = File.createTempFile("customerInfo",".data").getAbsolutePath();
        System.out.println(">> file is created in: " + path);
        itemWriter.setResource(new FileSystemResource(path));
 
        itemWriter.setLineAggregator(new MyCustomerLineAggregator());
        itemWriter.afterPropertiesSet();
 
        return itemWriter;
 
    }


特定を達成ItemProcessor

@Component
public class FirstNameUpperCaseProcessor implements ItemProcessor<Customer,Customer> {
    @Override
    public Customer process(Customer item) throws Exception {
		    // FirstName转大写
        return new Customer(item.getId(),item.getFirstName().toUpperCase(),item.getLastName(),
                item.getBirthdate());
    }
}
 

@Component
public class IdFilterProcessor implements ItemProcessor<Customer,Customer> {
    @Override
    public Customer process(Customer item) throws Exception {
		    // 过滤id为基数的数据
        if (item.getId() % 2 == 0){
            return item;
        } else {
            return null;
        }
    }
}


出力

ファイル




参考:

https://blog.csdn.net/wuzhiwei549/article/details/88622281

彼は187元記事に公開 ウォン称賛79 ビュー160 000 +を

おすすめ

転載: blog.csdn.net/weixin_38004638/article/details/104765018