2

多くのバッチ操作を行うシステムにSpring Batchを使用しています。
私はメモリ内DAOでSimpleJobRepositoryを使用しています。
JobRepository の使用を避ける方法があるかどうか知りたいですか? リソースレス トランザクション マネージャーに似たものはありますか?
私が尋ねている理由は、システムを再起動せずに常に実行する必要があり、消費するメモリについて懸念があるからです。
データベースベースの JobRepositry を使用できることはわかっていますが、率直に言って、まったく必要ありません。

そうする方法がない場合は、メモリ消費の問題について誰かが私を安心させることができれば幸いです。

ありがとう。

4

3 に答える 3

3

ジョブ コンテキストに関する情報を保持しているため、ジョブ リポジトリを使用する必要があります。あなたの場合の解決策は - scope="prototype" でジョブ リポジトリを作成することです。これにより、ジョブごとに新しいメモリ内 dao (マップ実装) が生成されるため、メモリの問題は発生しません。毎回新しいインスタンスを作成するオーバーヘッドは、バッチ ジョブに関しては無意味です。

于 2010-01-31T09:29:02.360 に答える
1

インメモリ実装には大きな欠点があります。バッチでマルチスレッドを使用できないことです。

したがって、データベースリポジトリを使用する必要があります。H2SQLを使用することをお勧めします。これは非常に軽量な組み込みデータベースです。ユニットテストに使用します。

Hibernateで非常にうまく機能します。

ベンの方法に対するこの方法の利点は、メモリデータベースに接続して、ジョブのステータス(および起動日など)を確認できることです。

于 2010-02-18T15:07:20.463 に答える
1

バッチ処理コードがスレッドセーフである限り、リポジトリがメモリにあるかデータベースにあるかは問題ではないと思います。はい、DB を使用している場合に得られるクラスタリングの利点の一部が失われる可能性がありますが、サーバーで実行されているバッチ ジョブが 1 つだけで、複数のスレッドを使用してその作業を行っている場合は、問題ありません。

于 2011-04-28T18:53:09.827 に答える