私の状況:
私はreaderItemでdbから読んだクラスAを持っています。次に、このクラス A を処理し、itemProcessor で行っているクラス B を作成する必要があります。最後に、このクラス B を itemWriter の db に保存します。
問題: 処理中に、クラス B の外部キーを持つクラス C (約 1 ミルのレコード) を作成し、このクラス C を保存する必要もあります。
私はこのようなことをすることはできません:私が書いたように、約2GBのスペースをメモリに保存する必要がある約1ミルのレコードがあるからです。SOこの問題をどのように解決すればよいですか。
public class BWriter extends BaseItemWriter<B> {
public void write(List<? extends B> data) throws Exception {
logger.info("Start writing: " + data);
for (B item : data) {
myCustomDao.saveB(item);
for (C itemC : item.getC()) {
itemC.setB(item);
myCustomDao.saveC(itemC);
}
}
}
}
アップデート:
私が欲しい春のバッチを含まない可能な解決策:
List<C> cList = new ArrayList<C>();
int i = 0;
String line;
while ((line = reader.readLine()) != null) {
String[] data = line.split(";");
if (data.length > 1 && !StringUtils.isBlank(data[1])) {
C cItem = new C();
cItem.set(...);
cList.add(i, cItem);
if (++i >= 1000) {
myCustomDao.save(cList);
cList = new ArrayList<C>();
i = 0;
}
}
}
if (!cList.isEmpty())
myCustomDao.save(cList);