我是春季批处理新手并且通过spring批处理读取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.每个源都是一个线程或者具有commit transaction = 1或者是基于SOURCE ////。xml内的lang文件数的线程跨度,什么是更好的选择。 3.我仍然觉得IteamReader是一个复杂的实现。这里每个xml文件只有一个记录。请分享您的意见。
由于
答案 0 :(得分:2)
这种情况的最佳实践可能是使用 partitioning;我没有尝试过,所以我不能帮助很多,但是我认为当您需要管理相同类型的数据时,分区是有用的,而不是在数据混合的情况下。
现在我的2美分......
我会去parallel steps
split/flow
commit-interval
等于1;您可以使用较大的值(或自定义CompletionPolicy
,如果您想要一个细粒度的提交)来提高性能MultiResourceItemReader
委托给每种来源的StaxEventItemReader
<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>