Spring の @Transaction レベルで例外をログに記録するにはどうすればよいですか?
某草草
某草草 2017-06-06 09:51:47
0
2
641

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

リーリー

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

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

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

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

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

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

某草草
某草草

全員に返信(2)
伊谢尔伦

insertOneStudent メソッド全体の try catch

リーリー

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

リーリー
いいねを押す +0
世界只因有你

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

リーリー

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

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

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

  • @AfterThrowing宣言処理メソッド

メモ:

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

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

    リーリー

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!