java - spring在多个子目录中批处理多个源

标签 java xml spring spring-batch

我是 Spring Batch 的新手,正在浏览 Spring Batch 并阅读 multipartItemReder ,我猜 multipartItemReader 不适合我的项目。请通过您的想法和公会给出几点意见。

我有超过 5000 万个 xml 文件,如下所示的目录结构。

 GOOD
    0
      001/en/1.xml
      001/jp/1.xml
      002/en/2.xml
      003/en/3.xml
      004/jp/4.xml
       .... 
       ....
      999/jp/1.xml  
    1000
      001/en/1.xml
      001/jp/1.xml
      002/en/2.xml
      003/en/3.xml
      004/jp/4.xml
       .... 
       ....
      999/jp/1.xml  
    2000
    3000
    ... 
    .. no limit 
 REMAKE/
    0
      001/en/1.xml
      001/jp/1.xml
      002/en/2.xml
      003/en/3.xml
      004/jp/4.xml
       .... 
       ....
      999/jp/1.xml  
 PROCLAIMED/
 ...
  ...
  ....
  like 100 directories ..  

每个源(GOOD、REMAKE、PROCLAIMED ...等)都有不同的 xml 文件格式。 1.我需要为每个源创建项目处理器。 2.每个源将是一个线程或提交事务=1或线程跨度基于SOURCE////.xml内的lang文件的数量,什么是更好的选项。 3.我还是觉得ItemReader的实现比较复杂。这里每个 xml 文件只有一条记录。请分享您的评论。

谢谢

最佳答案

对于这种情况,最好的做法可能是使用 partitioning ;我还没有尝试过,所以我帮不上什么忙,但我认为当您要管理相同类型的数据时分区很有帮助,而不是在数据混合的情况下。

现在我的 2 美分...
我会去parallel steps

  1. 使用split/flow将每个源作为单独的线程进行管理
  2. 不需要让commit-interval等于1;您可以使用较大的值(或者如果您想要细粒度的提交,则可以使用自定义的CompletionPolicy)来提高性能
  3. 使用 MultiResourceItemReader 委托(delegate)给特定于每种来源的 StaxEventItemReader
  4. 针对读取器返回的每种对象的专用处理器
  5. 作家(取决于您的需求)
<小时/>
<job id="job1">
  <split id="split1" task-executor="taskExecutor" next="lastStep">
    <flow>
      <step id="GOOD" />
    </flow>
    <flow>
      <step id="REMAKE" />
    </flow>
    <flow>
      <step id="PROCLAIMED" />
    </flow>
  </split>
  <step id="GOOD">
    <tasklet>
      <batch commit-interval="100">
        // Set MultiResourceItemReader and delegate to specialized StaxEventItemReader for GOOD file structure
        // Set specialized processor for GOOD object
        // Set writer (IDK which type)
      </batch>
  </step>
</job>

关于java - spring在多个子目录中批处理多个源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21990261/

相关文章:

java - Spring Security 与 Redis 的并发控制

java - 将数据插入DB ERROR: 'VARCHAR'类型的列不能保存 'INTEGER'类型的值

java - SoapUI 抛出对象引用未设置 : how to find reason

java - 在java代码中模板化多行字符串的简单方法

java - 制作并显示整数数组的所有排列

mysql - 从mysql中的xml中提取值

java - 使用 Spring 到 @autowire mybatis 映射器的 NullPointerException

c# - C# 中的 XML 序列化

java - 我们可以做些什么来加快 XML 处理速度?

使用 Maven 的 Spring 自定义命名空间