データベースに値を変更し、ファイルシステム上でいくつかの操作を行ういくつかのメソッドを記述する必要があります。データベースにtrue
にブールUpdating
フィールドを設定しいくつかの操作とロールバックを伴うトランザクションの処理
- : は、だから私はステップのこのシーケンスを確認する必要があります。この値にリンクされているファイルシステムおよびデータベース情報へのアクセスを避けるために使用されます(たとえば車の艦隊)
- データベースで何らかの操作を行います。たとえば、日付、名前、値、またはその他のフィールドを変更します。これらの変更は、より多くのデータベーステーブルに影響します。
- あなたは、私がエラーを管理し、データベースやファイルシステムを復元するために、ロールバックの手順を開始する必要が想像できるように、偽
にブール値Updating
を設定し、ファイルシステムへの変更およびデータベース
- エンティティ
JpaRepository
を拡張し、それらをデータベースに書き込む場合@Transactional
アノテーションを付けるメソッド名と@Query
からクエリの作成を持っているリポジトリのインターフェース(そうでない場合、私はエラーをrecevied)- サービス・インターフェース
- データベースに簡単な変更を加えるためのすべてのメソッドを含むサービス実装。このクラスは、私がデータベースを使用するサービスのメソッドを呼び出すが、私はこれらのメソッドの一部を呼び出した場合、ロールバックをスローすることはできませんので、私はデータベースに各値を書き込み、他のクラスから
@Transactional
、またはI間違ったと注釈されています? ステップ1はデータベースに直接書き込む必要がありますが、代わりに@Transactionalプロパティを使用する必要がありますが、メソッドに@Transactionalを追加するだけで十分ですか?ファイルシステムのロールバックでは、すべてのサブフォルダのバックアップを作成し、エラーが発生した場合に復元します。たとえば :
@Transactional(rollbackFor=FileSystemException.class)
private void changeDisplacement(int idApplication, int idDisplacement){
applicationServices.setUpdating(true); //this has be to write immediatly into database so that the other methods can stop using this application
Application application = applicationServices.getId(idApplication);
application.setDisplacement(displacementServices.getId(idDisplacement));
//OTHER OPERATIONS ON DIFFERENT TABLES
//OPERATIONS ON FILE SYSTEM CATCHING ALL EXCEPTION WITH TRY-CATCH AND IN THE CATCH RESTORE FILESYSTEM AND THROW FileSystemException to start database rollback
//In the finally clause use applicationServices.setUpdating(false)
}
が、それはこのロジックで動作することができますか@Transactional
フィールドがここで間違っていますか? ありがとう
私はあなたが_FILE RESTORE_フェーズを保証できないと思います。ファイルを書き込んでいる間に例外がスローされると、それを書き直して状態を復元する可能性が高くなります。 – minus
確かに、私は一度だけ更新しようとします。復元が失敗した場合、私は電子メールを送信し、手動操作で問題が解決されるまでファイルシステムをロックしたままにしておきます。 – luca