2017-06-27 9 views
1

私は、特定のエンティティがいくつかのアクションで利用可能になるまでの日付を表す列を持つデータベース内のエンティティを持つアプリケーションで作業しています。期限が切れると、状態を変更する必要があります。つまり、状態を表す列を更新することです。日付欄に基づいてデータベースレコードを更新します

私がこれまで行ってきたことは、それらのエンティティが何かを行うようにデータベースに依頼するたびに、まず期限切れでないかどうかを確認し、期限切れでない場合は更新します。私は特にこのアプローチが好きではありません。それは、私が質問していないという理由だけで、間違った状態になるレコードをデータベースにたくさん残すことを意味します。もう1つのアプローチは、それらのレコードを実行し、必要に応じてそれらを更新する定期的なタスクを持つことです。もう一度、私は矛盾した状態でレコードを持っていて、この場合、最初のアプローチはより合理的であるように思えます。

これを行う別の方法はありますか、私には何か不足していますか?私は言及する必要があります、私は私のアプリケーションのために春のブート+休止状態を使用します。基礎となるdbはPostgresqlです。私が望むものを得るために使用できる技術に特有の技がありますか?

+0

そのようなことのためのベスト・プラクティスだし、そうしようとする不正確なデータを調整し、同期させる。おそらく「期限切れ」は明示的な「ステータス」ではなく、日付とステータスの計算された組み合わせであるべきですか?したがって、何か(例えば)「保留中」で過去の日付がある場合、ビジネスロジックによって期限切れとみなされますか?それはまだ決して完了していないので、結局は技術的に「保留中」です。ビジネスロジックのために完了することはありません。 – David

+0

私の問題は、私は2つの州しか持っていない、すなわち保留中と期限切れです。したがって、期日の前に、エンティティは3つの受け入れ可能な状態のうちの1つになることができ、期日後に別の4つの状態になることができる。これは基本的にはワークフローであり、その状態に基づいて実行可能なアクションがあります。 – user1550876

答えて

1

データベースにはtrigerタイプが期限切れになっていません。もしあなたが期限切れになってしまった場合は、2つの解決策があります(あなたはそれについて書いています):データを使用する前に期限切れにいくつか追加してください。側)。 私はcronのアプローチを使用することをお勧めします。ここでの説明は次のとおりです。あなたがデータを取得する前に 期限切れで何かを実行します。

選択

前に更新を+:あなたがそれを必要とする前に、期限切れのデータを更新し、ここで質問です - あなたが要求したことのみを更新または全て期限切れの更新...すべてのレコードから2つのレコードしか必要とせず、関連していない2000年のレコードを更新した場合、すべてが時間のかかることがあります。

- :すべてのレコードを更新するのに時間がかかります。データベースが共有されている場合 - アプリケーションへのアクセスだけでなく、期限切れに関連するロジックは実行されません(この場合)。あなたは、あなたが期限切れで何かをやるべきで、どこにしてはいけないかを制御するエントリポイントが必要です。有効期限が切れても、期限切れのロジックを実行した後でも、次の秒で新しいレコードが期限切れになる可能性があります。期限切れのデータ処理の更新ワークフローロジックが必要な場合は、cron、変更するロジックを更新する必要があります。

CRON/TASK

- :あなたはそれ:)一度だけ30〜60分、最大設定するために時間を費やす必要があります。 +:バックグラウンドで実行されます。あなたのアプリケーションがデータベースを使用するだけでなく、期限切れのデータロジックも利用可能になります。あなたはチェックする必要はありません(そして、それについてrememebrしていないし、新しい従業員....について説明してください)何かを選択する前にJavaコード内の任意のstaledデータです。あなたはスタイリングされたデータについてのケアの間にロジックを分割し、通常のクエリはdbを実行します。 あなたはcronの中で「更新のために選択する」を実行することができますし、サーバー側のクエリからの更新時間中に選択しない場合でも、あなたは、データ・ロジック・complets staledますお待ちしておりますし、あなたが日付データ春に

まで選択でGET: spring scheduling documentationsimple example spring-quartz-schedule

デシベルレベルPostgreSQLのジョブスケジューラ

スケジューラ/ cronのためにそれはここで、ルートの問題は、システムが保存される二つの別々の場所で「期限切れ」ということであるようですね

関連する問題