財務調整を行うためにバッチジョブを作成する必要があります。今私は3つのステップがあります:
ステップ1:サードパーティからXMLを読み取り、これをドメインオブジェクトに変換し、DB(表1)に書き込みます
ステップ2:トランザクションデータストアからflatFileを読み取り、DBに書き込みます(表2)
ステップ3:aggregatorObjectでテーブル1とテーブル2の両方を読み取り、両方のリストを処理して相違点を見つけ、ステータスコードを設定し、テーブル2にステータスコードを書き込みます。
私の問題はstep3にあります。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;
}
}
このリーダーは、テーブルを読み取り、ドメインオブジェクトを返す、すでに実装されている2つのサービス(DAO)を使用します。私は私たちとそれらからのトランザクションの2つのリストを取得し、それらをアグリゲーターオブジェクトに入れます。このオブジェクトはItemProcessorに渡され、ビジネスロジックを実行できます...しかし、このリーダーはnullを読み取らないため、無限ループを開始します。
ItemReaderAdapterについて読みましたが、nullを取得するまでコレクションをループするという同じ問題があります。
要約すると、2つの異なるテーブルを読み取り、2つのリストを取得したいと思います。
List<TransactionThirdParty>
List<TransactionHome>
次に、My ItemProcesssorは、両方のリストが等しいかどうか、一方が他方よりもトランザクションが多いか少ないかを確認します。
Spring Batchの専門家なら誰でも何か提案できますか?