【问题标题】:Spring Batch 3 Custom Writer with a List带有列表的 Spring Batch 3 自定义编写器
【发布时间】:2017-05-10 14:08:10
【问题描述】:

想象一个具有 3 个字段的 Menu.java pojo:id、姓名和电话。

我正在使用 Spring Batch 3。我的处理器返回给我一个列表。我想将列表中每个对象的这些值写入文件。

如果 Menu 不是列表,这将是我的 writer 类:

@Bean(name="MyWriter")
@SphynxBatchStepScope
public FlatFileItemWriter<Menu> myWriter() String fileOutputName) {

    FlatFileItemWriter<Menu> writer = new FlatFileItemWriter<Menu>();   
    writer.setResource(new FileSystemResource("test.txt")));
    DelimitedLineAggregator<Menu> delLineAgg = new DelimitedLineAggregator<Menu>();
    delLineAgg.setDelimiter("          ");
    BeanWrapperFieldExtractor<Menu> fieldExtractor = new BeanWrapperFieldExtractor<Menu>();
    fieldExtractor.setNames(new String[] {"id", "name", "telephone"});
    delLineAgg.setFieldExtractor(fieldExtractor);
    writer.setLineAggregator(delLineAgg);
    writer.setHeaderCallback(header());
    writer.setFooterCallback(footer());
    writer.setEncoding("UTF-8");

    return writer;
}

但是,如果我想将此类转换为与 List 一起使用,我该怎么做呢?

我找不到任何解决方案。只有这个:

Using an ItemWriter with List of Lists

但我不知道如何实现这一点。例如,在哪里以及如何调用 setDelegate 方法。或者当我需要输入我的“id”、“name”、“telephone”序列时。

请问,有人知道带有自定义 Writer 和 List 的代码示例吗?

提前致谢

【问题讨论】:

  • 请注意,我使用带有注释的 Spring Batch 3,没有 xml 配置文件

标签: spring-batch


【解决方案1】:

您的作者会保持原样,但会被ListUnpackingItemWriter 包裹起来。

// NOTE: this will now be the delegate used by the delegating writer.
// It will be injected to the delegating writer.
@Bean(name="MyDelegateWriter")
@SphynxBatchStepScope
public FlatFileItemWriter<Menu> myWriter(String fileOutputName) {

    FlatFileItemWriter<Menu> writer = new FlatFileItemWriter<Menu>();   
    writer.setResource(new FileSystemResource("test.txt")));
    DelimitedLineAggregator<Menu> delLineAgg = new DelimitedLineAggregator<Menu>();
    delLineAgg.setDelimiter("          ");
    BeanWrapperFieldExtractor<Menu> fieldExtractor = new BeanWrapperFieldExtractor<Menu>();
    fieldExtractor.setNames(new String[] {"id", "name", "telephone"});
    delLineAgg.setFieldExtractor(fieldExtractor);
    writer.setLineAggregator(delLineAgg);
    writer.setHeaderCallback(header());
    writer.setFooterCallback(footer());
    writer.setEncoding("UTF-8");

    return writer;
}

// NOTE: now this "MyWriter" will be used by your job
@Bean(name="MyWriter")
@SphynxBatchStepScope
public ListUnpackingItemWriter(@Qualifier("MyDelegateWriter") FlatFileItemWriter<Menu> delegate) {
    ListUnpackingItemWriter<List<Menu>> writer = new ListUnpackingItemWriter<>();
    writer.setDelegate(delegate);
    return writer;
}

【讨论】:

  • 非常感谢,院长!
  • 你好院长..你能提供我相同的xml配置吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2017-01-29
  • 1970-01-01
  • 2011-05-22
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多