当前位置: 首页 > 知识库问答 >
问题:

Spring批处理可以分类返回多个写入器

翟昊明
2023-03-14

我是新来的Spring批我有一个大的主表。这个主表被合并到5个单独的表中。我的要求是我需要创建一个编写器,它将写入这5个单独的表。但这些写入程序将根据以下条件调用:例如:如果我有一个未在主表中设置的字段,我将调用2个写入程序并跳过其他3个写入程序。

我使用带有分类器的复合写入器来检查条件,但分类器只返回1个写入器。分类器可以返回多个作家吗?或者有其他类可以满足我的要求吗?

共有1个答案

贺彬
2023-03-14

您可以创建一个自定义ItemWriter,它结合了多个ItemWriter来处理特定情况。例如,假设有两种情况需要不同的ItemWriter。Case1需要写入table1和table2:

@Component
public class Case1ItemWriter implements ItemWriter<Foo> {

    @Autowired
    private JdbcBatchItemWriter writer1;  //write to table1

    @Autowired
    private JdbcBatchItemWriter writer2;  //write to table2

    @Override
    public void write(List<? extends T> items) throws Exception{
        writer1.write(items);
        wrtire2.write(items)
    }
}

案例2需要写入表3和表4:

@Component
public class Case2ItemWriter implements ItemWriter<Foo> {

    @Autowired
    private JdbcBatchItemWriter writer3;  //write to table3

    @Autowired
    private JdbcBatchItemWriter writer4;  //write to table4

    @Override
    public void write(List<? extends T> items) throws Exception{
        writer3.write(items);
        wrtire4.write(items)
    }
}

然后实现一个分类器,以确定不同的情况,以返回它们自己的ItemWriter:

@Component
public class MyClassifier implements Classifier<Foo ,ItemWriter<Foo>> {

    @Autowired
    private Case1ItemWriter case1ItemWriter;

    @Autowired
    private Case2ItemWriter case2ItemWriter;  

    @Override
    public ItemWriter<Foo> classify(Foo foo){

      if(foo.isBlabBlaBla()){
        return case1ItemWriter;
      }else{
        ......
        return case2ItemWriter;
      }
    }
}

并将此分类器配置为分类器CompositeItemWriter

 类似资料:
  • 我正在编写一个spring批处理作业,在其中一个步骤中,我为处理器编写了以下代码: null 欢迎任何暗示。

  • CompositeItemWriter:当我需要将项目平均地分给Writer时,似乎会将所有读取的项目传递给所有的Writer。 BacktoBackPatternClassifier:我并不真正需要分类器,因为我是均匀地拆分项目。 有没有另一种方式,让一个读者和多个作者? 或者我可以在Writer中手动创建线程?

  • 我是Spring批处理的新手,目前正在处理一个新的批处理作业。我的批处理作业: 读取器:读取数据库中的记录(即5家公司的员工) 处理器:处理记录 5个writer:过滤并写入每个文件(即A公司的员工在A路径写入A公司文件,B公司的员工在B路径写入B公司文件),最后一个writer将A公司的所有离职员工写入D公司。 任务:将文件保存到数据库中。 目前,我正在使用CompositeItemWriter

  • 我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,

  • 我目前正在编写spring batch,在这里我读取一个XML数据,对其进行处理,然后将处理结果作为< code>map传递 生成用于编组和解组的JAXB xjc类。JAXB生成的类如下所示。 JAXB员工类 Spring XML配置文件 处理器和写入器: 问题: XML文件对于每个固定的提交间隔都是重写的,很明显,XML文件是在每个提交级别之后创建的。但我必须附加所有

  • 在我的项目中配置了以下内容: 加载文件时,我有重复的记录,但因为我配置了在下,Spring batch不应回滚记录,但仍将回滚记录。如果我从列表中删除,那么它将抛出异常。我们正在使用Spring批处理版本: 不希望回滚记录,但会回滚记录。