検索

ホームページ  >  に質問  >  本文

Spring の @Transaction レベルで例外をログに記録するにはどうすればよいですか?

@Transaction を使用する前の私のビジネス コード モデルはおそらく次のとおりでした:

リーリー

上記と同様に、上記のデータベース操作が成功したか失敗したかに関係なく、ログにフィードバックを取得できます。

ただし、上記のアプローチではコードの重複が多くなります。このようなロギング機能は、spring が提供する aop を使用して実装できます。しかし、ドキュメントを読んだ後、@Transaction## があることがわかりました。 # アノテーション。このアノテーションを使用すると、コードは次のように簡略化できます。 リーリー このようにして、データベース操作が正常に実行された場合はログに記録することができますが、この場合、挿入操作が失敗した場合はどのようにログに記録すればよいのでしょうか。

私の最初のアイデアは、@Transaction

に似た動的リフレクション関数を手動で実装して、データベース内のデータ変更に影響を与えるすべてのメソッドが実行されるときに動的に反映されるようにすることです

invoke()例外処理 try catch がメソッド内で行われます。 しかし、Spring にそのような組み込み関数があるかどうかはわかりません。 p.s: すべてのデータベース操作と処理を service

レベルに置くようにしており、その上にログ レコードをスローしたくありません。

某草草某草草2733日前677

全員に返信(2)返信します

  • 伊谢尔伦

    伊谢尔伦2017-06-06 09:53:47

    insertOneStudent メソッド全体の try catch

    リーリー

    または @RestControllerAdvice を実装し、例外ログを出力します
    次のようにします:

    リーリー

    返事
    0
  • 世界只因有你

    世界只因有你2017-06-06 09:53:47

    Spring はアスペクト例外処理も提供します

    リーリー

    もちろん、xml 設定がある場合は、アノテーション設定も存在します。主に以下のようなコメントがあります

    • @Aspectはアスペクト構成を宣言します

    • @Pointcut がアスペクトを宣言します

    • @AfterThrowing宣言処理メソッド

    メモ:

    1. 例外を処理するクラスは、インターフェイスを実装したり、クラスを継承したりする必要はありません。

    2. 例外を処理するメソッドは、2つのパラメータを宣言する必要があります(宣言しないこともできます。例外情報は取得できません)。例:

      リーリー

      joinPointパラメータは例外をスローするメソッドのパラメータ情報を取得できるのは言うまでもありません。

    3. 上記の内容は参考用です。Spring のバージョンが異なると、上記の手順が実際の状況と異なる場合があります。標準的な手順については、Spring の公式ドキュメントを参照してください。

      返事
      0
  • キャンセル返事