我必须创建批量作业才能进行财务调节。现在,我有3个步骤:如何使项目阅读器读取2个表格
第1步:阅读来自第三方的XML,转换这在我们的领域对象,写在DB(表1)
第2步:阅读我们的交易数据存储中的FLATFILE在DB(表2)写
第3步:在aggregatorObject,工艺同时读取表1和表2都列表来查找差异和设置状态代码,表写的状态码2
我的问题是第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,但我仍然有遍历集合了同样的问题,直到我得到一个空。
因此,在总结,我想读2页不同的表,并得到2列表:
List<TransactionThirdParty>
List<TransactionHome>
然后我ItemProcesssor会检查是否两个列表都是平等与否,是一个有着或多或少的交易,然后在other..etc
任何Spring Batch的专家可以建议的东西吗?
谢谢。我会研究这一点。 Ttyl – Cygnusx1
所以,如果我明白了。我应该做我的阅读(调用我的两个dao方法),我的处理和我的写作都在一个tasklet中?我没有数百万的记录,但我会在50K的范围内。我不知道这 – Cygnusx1
因为你写道“我的ItemProcesssor将检查,如果两个列表是否等于或不是,是有或多或少的尝试,然后其他..等”我没有看到其他方式。如果您的业务逻辑规定您要比较两个DAO的结果,那么tasklet就是要走的路。但是,如果我误解了上面的一行,并且需要逐条记录比较(而不是它们的列表),那么您不应该使用这些dao功能 –