让我们说我们在一个CSV文件中有10万笔交易/记录。
我们必须处理1000条记录。
处理完所有批次后,调用下一个路由或bean将其保留在DB中的批次中。
在下面的代码中,csvUnmarshalledInstructionsProcessor类验证CSV记录。然后structionProcessor类将事务保留在数据库中。
from(SPLIT_CSV_CORE_ENDPOINT)
.routeId(SPLIT_CSV_CORE_ROUTE)
.transacted()
.convertBodyTo(String.class, "utf-8")
.split().tokenize(RouteConstants.NEW_LINE_DELIMITER, tokenGroupSize)
.aggregationStrategy(new NPDAggregationStrategy())
.stopOnException().parallelProcessing().shareUnitOfWork().streaming()
.doTry()
.unmarshal(csv)
.bean(csvUnmarshalledInstructionsProcessor)
.bean(instructionProcessor)
.doCatch(Exception.class)
.bean(exceptionPropagator)
.end()
.end()
.end();
第一批中有错误时没有问题。当系统在第一批中发现问题时,它确实会引发异常,并且不会进一步处理。
这里的问题是,如果第一个批次之后的任何批次出现任何验证错误,则代码会保留所有先前有效批次的1000条记录。当系统在一批(在第一批之后)看到无效记录时,我们拒绝文件或有效负载,这使得数据不一致。但是我们还将交易或有效批次的记录保存到数据库中。
那么我们可以首先批量验证记录吗,一旦对所有100K记录进行了验证,是否会调用另一条路线再次将其持久保存?