【发布时间】:2012-11-08 02:27:24
【问题描述】:
我必须创建一个批处理作业来进行财务对帐。现在我有 3 个步骤:
第 1 步:从第三方读取 XML,将其转换为我们的领域对象,写入 DB(表 1)
第 2 步:从我们的事务数据存储中读取一个平面文件,写入 DB(表 2)
第3步:在aggregatorObject中同时读取table1和table2,处理两个list查找差异并设置状态码,在table2中写入状态码
我的问题是第 3 步。我找不到让我的 ItemReader 从 2 SQL 读取的好解决方案。
我从这样的自定义 ItemReader 开始:
package batch.concilliation.readers;
@Component("conciliationReader")
public class TransactionReader implements ItemReader<TransactionsAgragegator>{
private final Logger log = Logger.getLogger(TransactionReader.class);
@Autowired
private ConciliationContext context;
@Autowired
private ServiceSommaireConciliation serviceTransactionThem;
@Autowired
private ServiceTransactionVirement serviceTransactionUs;
@Override
public TransactionsAgragegator read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
TransactionsAgragegator agregator = new TransactionsAgragegator();
SommaireConciliationVirementInterac sommaire = serviceSommaireThem.findByRunNo(context.getRunNo());
List<TransactionVirement> journalSic = serviceTransactionUs.findByTimestamp(sommaire.getBeginDate(), sommaire.getEndDate());
// on place ces deux listes dans l'objet agregteur.
agregator.setListeTransactionThem(sommaire.getPayments());
agregator.setListeTransactionsUs(journalSic);
return aggregator;
}
}
此阅读器使用两个已实现的服务 (DAO),它们读取两个表并返回域对象。我从我们和他们那里获取两个交易列表,并将它们放在一个聚合器对象中。这个对象将被传递给 ItemProcessor,我可以做我的业务逻辑......但是这个阅读器启动了一个无限循环,因为它永远不会读取 null。
我阅读了有关 ItemReaderAdapter 的信息,但我仍然遇到同样的问题,即循环遍历一个集合,直到我得到一个 null。
总而言之,我想阅读 2 个不同的表格并获得 2 个列表:
List<TransactionThirdParty>
List<TransactionHome>
然后我的 ItemProcesssor 将检查两个列表是否相等,一个有更多或更少的交易然后另一个..etc
任何 Spring Batch 专家都可以提出建议吗?
【问题讨论】:
标签: spring-batch