春のバッチresourcelessのJobRepository
-
21-09-2019 - |
質問
私は、バッチ操作の多くを行うシステムのための春のバッチを使用しています。
私は、メモリのDAO内でSimpleJobRepositoryを使用しています。
私はJobRepositoryを使用して回避する方法があるかどうかを知りたいですか? resourcelessトランザクションマネージャと似たような?
私が求めている理由は、システムが再起動せずに常に実行する必要があり、私はそれを消費することになるメモリに関するいくつかの懸念を持っているということです。
私は私がJobRepositryベースのデータベースを使用することができます知っているが、率直に言って、私は本当にすべてのものを必要としません。
誰かがメモリ消費の問題について私を安心させることができれば、私はそれを感謝しますそうするための方法がない場合ます。
感謝します。
解決
あなたは仕事のリポジトリを使用する必要があります。 あなたのケースのためのソリューションです - スコープ=「プロトタイプ」であなたの仕事のリポジトリを作ります これは、各ジョブの新しいにおけるメモリDAO(マップ実装)、ひいてはなしメモリの問題を傷薬ます。 毎回新しいインスタンスを作成するオーバーヘッドは、バッチジョブの点では意味があります。
他のヒント
インメモリーの実装は大きな欠点があります:あなたは、あなたのbatchsでマルチスレッドを使用することはできません。
。ですから、データベース・リポジトリーを使用する必要があります。 私はあなたがH2 SQLを使用することをお勧め:それは非常に軽い組み込みデータベースです。 私たちは、ユニットテストのためにそれを使用します。
これは休止状態と非常によく動作します。
ベンの1を超えるこの方法の利点は、(...と起動の日付など)を使用すると、ジョブの状態を確認するために、メモリデータベースあなたに接続することができます。
私がいる限り、私のバッチ処理コードは、スレッドセーフである、それは問題でリポジトリは、メモリまたはデータベースにあるかどうかべきではないと思います。はい、あなたはあなたがDBを使用している場合に得ることができたクラスタリングの利益の一部を失うかもしれないが、私は唯一のバッチ・ジョブが私のサーバー上で実行され、そのは、その仕事をするために複数のスレッドを使用している場合、それは問題ないはずです。