>  Q&A  >  본문

Spring의 @Transaction 레벨에서 예외를 기록하는 방법은 무엇입니까?

@Transaction를 사용하기 전에 내 비즈니스 코드 모델은 아마도 다음과 같았을 것입니다.

으아악

위와 마찬가지로 위의 데이터베이스 작업이 성공적으로 실행되거나 실패하더라도 로그에서 피드백을 얻을 수 있습니다.

그러나 위의 접근 방식은 코드 중복을 많이 발생시킵니다. 이러한 로깅 기능은 spring에서 제공하는 aop를 사용하여 구현할 수 있습니다. 그러나 나중에 문서를 살펴보니 이 주석을 사용하는 것이 있습니다. , 코드는 다음과 같이 단순화될 수 있습니다: @Transaction 으아악

이렇게 하면 데이터베이스 작업이 성공적으로 수행되면 로그에 성공적으로 기록할 수 있습니다.

이런 경우 삽입 작업이 실패하면 어떻게 로그에 기록해야 할까요?

이제 나의 초기 아이디어는

와 유사한 동적 반사 기능을 수동으로 구현하여 데이터베이스의 데이터 수정에 영향을 미치는 각 메소드가 실행될 때 invoke() 예외 처리를 동적으로 반영하는 것입니다. try catch 메소드에서 수행됩니다. @Transaction的动态反射的功能,这样每个要影响数据库中的数据修改的方法执行的时候我都在动态反射的invoke()方法中进行异常的try catch근데 스프링에 그런 기능이 내장되어 있는지 모르겠네요?

p.s: 저는 모든 데이터베이스 작업과 처리를

수준에서 처리하려고 최선을 다하고 로그 기록을 위에 던지는 것을 원하지 않습니다. service

某草草某草草2691일 전640

모든 응답(2)나는 대답할 것이다

  • 伊谢尔伦

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

    insertOneStudent 메소드 전체 시도 캐치

    으아악

    또는 @RestControllerAdvice를 구현하고 거기에 예외 로그를 ​​인쇄하세요.
    다음과 같습니다:

    으아악

    회신하다
    0
  • 世界只因有你

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

    Spring은 측면 예외 처리도 제공합니다

    으아악

    물론 xml 구성이 있으면 주석 구성도 있습니다. 주로 다음과 같은 댓글이 있습니다

    • @Aspect는 측면 구성을 선언합니다

    • @Pointcut은 측면을 선언합니다

    • @AfterThrowing 선언 처리 방법

    참고:

    1. 예외를 처리하는 클래스는 인터페이스를 구현하거나 클래스를 상속할 필요가 없습니다.

    2. 예외 처리 방법에서는 두 개의 매개변수를 선언해야 합니다(선언할 수도 없으며 예외 정보를 얻을 수 없음). 예를 들어

      으아악

      joinPoint 매개변수는 예외를 발생시키는 메소드 매개변수 정보를 얻을 수 있습니다.

    3. 위 내용은 참고용입니다. Spring 버전에 따라 위 지침이 실제 상황과 다를 수 있습니다. 표준 지침은 Spring 공식 문서를 참조하세요.

    회신하다
    0
  • 취소회신하다