我有一个自定义项目阅读器来返回表格中的记录列表。我的作业在无限循环中运行,因为没有达到读者合同。有关这个的任何建议吗?
package com.example.ctuser1.myapplication;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.SOURCE)
public @interface Widget {
}
答案 0 :(得分:0)
你的名单永远不会改变。假设您读取了大小为5的列表,则返回语句将始终返回相同的列表。您ItemReader
的逻辑看起来只想返回一个列表(也就是对read()
方法的一次调用)。
答案 1 :(得分:0)
根据Spring Batch Reader合同,您的方法将一次又一次地被调用,直到它返回null。在您的代码中,如果customDao成功,您的列表将始终为相同大小,它将永远不会为零。你需要一些条件来摆脱那个循环并返回null。这是一个可能的解决方案,通过使用一个名为index的变量来打破这个循环。
另一方面,我看到迈克回答了你的问题,我从他的书和视频本身中学到了春季批次:)
public class customReader implements ItemReader<List<T>> {
private static List<T> CCTransDlyLg = null;
@Autowired
customDao customDao;
private int index = 0;
@Override
public List<T> read() throws Exception {
if (CCTransDlyLg == null || (CCTransDlyLg != null && CCTransDlyLg.size() == 0)) {
CCTransDlyLg = customDao.getList();
index = CCTransDlyLg.size() + 1;
}
log.info("CCTransDlyLg List:" + CCTransDlyLg.size());
return index > CCTransDlyLg.size() ? null : CCTransDlyLg;
}