3

このスレッドに似ていますが、正確ではありません:スレッドセーフな方法で情報をキャッシュする方法

「参照データ」を処理するための通常のパターンは何ですか?アプリケーションによって頻繁に読み取られ、通常はデータベースまたはプロパティファイルで外部化されますが、更新頻度は非常に低い(日、週、月)データですか?データ更新されると、外部で更新されます。

これは通常、DAOを注入して、独自のコンテンツを管理できるシングルトンでしょうか?このサービスでrefresh()メソッドを公開して、強制的に更新する(つまり、MBeanを介して)というアイデアが好きです。したがって、アプリケーションをバウンスする必要はありません。

他のSOスレッドからは、必要に応じてDAOをインスタンス化し、そのレベルで透過的にキャッシュする可能性があるようです。

私は、シングルトンサービスに、データベースからデータをロードする実際のDAO、またはハードコードされた応答を返すモック/テストダブルのいずれかが注入されるというアイデアが好きです。ただし、Java列挙型を介してサービスをシングルトンとして実装する場合、これにより、Springを介してサービスを接続するのが少し問題になります。

では、他の人は通常、参照データをどのように扱いますか?随意にクエリを実行しますが、キャッシュを隠蔽しますか?または別のメモリ内サービス?

4

1 に答える 1

2

私は通常、Spring を使用して DAO 実装をサービス レイヤーに挿入します。また、おっしゃるように、SQL ベースの実装に加えて、テスト実装 ( XMLDao、 ) を使用することがよくあります。FlatFileDao小さなデータセットの場合、私は通常、独自のキャッシュを作成し、基礎となるテーブルからロードされたすべてのデータをメモリに保存します。

そうは言っても、かなり小さなデータセットで作業できるという利点があります。より大きなデータセットを扱っていた場合、既製のキャッシング ソリューションを検討し、複数の JVM ( Terracottaなど) に分散する可能性があります。

前のスレッドで述べたように、refresh() メソッドも公開しています。データの更新をタイムリーに伝達する必要がない場合は、MBean を介して手動で呼び出すだけです。これを自動化したい状況では、Tibrv を使用してデータベースからの更新をリッスンし、キャッシュされたデータを更新しました (MS-SQL トリガーを使用して Tibrv メッセージを生成します)。

Java列挙型を使用してサービスを実装するというあなたの言及をよく理解していません-これはどのように機能しますか?

于 2009-07-06T15:21:44.983 に答える