Spring batch Spring Batch 3自定义编写器,带有列表

Spring batch Spring Batch 3自定义编写器,带有列表,spring-batch,Spring Batch,假设一个Menu.javapojo有3个字段:id、name和phone 我使用的是SpringBatch 3。我的处理器返回一个列表。我想把列表中每个对象的值写在一个文件上 如果菜单不是列表,这将是我的writer类: @Bean(name="MyWriter") @SphynxBatchStepScope public FlatFileItemWriter<Menu> myWriter() String fileOutputName) { FlatFileItemWri

假设一个Menu.javapojo有3个字段:id、name和phone

我使用的是SpringBatch 3。我的处理器返回一个列表。我想把列表中每个对象的值写在一个文件上

如果菜单不是列表,这将是我的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;
}
@Bean(name=“MyWriter”)
@斯芬克斯步进镜
公共FlatFileItemWriter myWriter()字符串fileOutputName){
FlatFileItemWriter writer=新的FlatFileItemWriter();
setResource(新文件系统资源(“test.txt”);
DelimitedLineAggregator delLineAgg=新的DelimitedLineAggregator();
DellineAg.setDelimiter(“”);
BeanWrapperFieldExtractor字段提取器=新的BeanWrapperFieldExtractor();
setNames(新字符串[]{“id”,“name”,“telephone”});
delLineAgg.setFieldExtractor(fieldExtractor);
writer.setLineAggregator(delLineAgg);
writer.setHeaderCallback(header());
setFooterCallback(footer());
writer.setEncoding(“UTF-8”);
返回作者;
}
但是如果我想把这个类转换成一个列表,我该怎么做呢

我找不到任何解决办法。只有这一点:

但我不知道如何实现这一点。例如,调用setDelegate方法的where和how。或者当我需要输入我的“id”、“姓名”、“电话”序列时

请问,是否有人知道一个带有列表的自定义编写器的代码示例


提前感谢

您的作者将保持原样,但将被
列表UnpackingItemWriter
包装

// 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;
}
//注意:这将是委托编写器使用的委托。
//它将被注入授权作者。
@Bean(name=“MyDelegateWriter”)
@斯芬克斯步进镜
公共FlatFileItemWriter myWriter(字符串fileOutputName){
FlatFileItemWriter writer=新的FlatFileItemWriter();
setResource(新文件系统资源(“test.txt”);
DelimitedLineAggregator delLineAgg=新的DelimitedLineAggregator();
DellineAg.setDelimiter(“”);
BeanWrapperFieldExtractor字段提取器=新的BeanWrapperFieldExtractor();
setNames(新字符串[]{“id”,“name”,“telephone”});
delLineAgg.setFieldExtractor(fieldExtractor);
writer.setLineAggregator(delLineAgg);
writer.setHeaderCallback(header());
setFooterCallback(footer());
writer.setEncoding(“UTF-8”);
返回作者;
}
//注意:现在您的工作将使用此“MyWriter”
@Bean(name=“MyWriter”)
@斯芬克斯步进镜
公共列表UnpackingItemWriter(@Qualifier(“MyDelegateWriter”)FlatFileItemWriter委托){
ListUnpackingItemWriter=新建ListUnpackingItemWriter();
writer.setDelegate(delegate);
返回作者;
}

注意,我使用带注释的Spring Batch 3,没有xml配置文件。非常感谢,dean!嗨,迪恩。。你能给我提供同样的xml配置吗?