1

最初のステップは、データベーステーブルからいくつかのレコード (約 150-200) をリストに取得する TaskletStep です。

2 番目のステップでは、他のテーブルからデータを取得し、前のステップで取得したレコードのリストを処理する必要があります。

これを行うには 3 つの方法があります。1) 最初のステップで取得したリストを StepExecutionContext に配置し、それを JobExecutionContext に昇格させてステップ間でデータを共有する。

2) スプリングのキャッシング コンセプトを使用する、つまり @cacheable を使用する

3) プログラムでリストを ApplicationContext に入れる

これを達成するための最良の方法は何ですか (例で説明できるとよいでしょう)。2 つの主な懸念事項を念頭に置いてください: 最初のステップで取得されるデータの量が増加し、パフォーマンスが向上する場合

4

1 に答える 1

2

ステップ コンテキスト内のオブジェクトはデータベースに格納されることに注意してください。そのため、オブジェクトがシリアライズ可能であり、実際には少数であることを確認する必要があります。確実な場合は、jobExecutionContext にオブジェクトを配置するか (ソリューション 1 として)、Bean ホルダーを使用します (データを将来のステップに渡す)。このタイプのアプローチは、最初のステップのデータが小さい場合にのみ有効です。
それ以外の場合は、step1 でデータを取得せずに step2 でデータを処理できますが、step2 でデータを処理しながら step1 データのキャッシュを簡単に管理できます。この方法では、step1 は必要ありません。step1 のデータをデータベースに保存する必要はありませんが、step2 で数百万件のレコードを処理している間に step1 のデータを検索しても、処理時間に影響はありません。

私が明確だったことを願っています、英語は私の言語ではありません

于 2013-11-11T07:35:27.793 に答える