当前位置: 首页 > 知识库问答 >
问题:

使用Spring AOP捕获Spring运行时异常

史骏
2023-03-14

出于日志记录的目的,我们正试图通过Spring自己的AOP捕获各种Spring的运行时异常,我必须说我没有成功,所以我非常感谢关于如何实现这一点的任何想法。

我试过这样的方法:

@Aspect
@Component
public class SomeAspect {

@AfterThrowing(pointcut = "execution(* org.springframwork.oxm..*(..))", throwing = "exception")
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void adviseSpringErrorEvents(JoinPoint joinPoint, final UnmarshallingFailureException exception) throws Throwable {

         LOG.debug(this.getClass().getSimpleName() + " - Error message advice fired on method: " + joinPoint.getSignature().getName());
     }
}

该类是自动代理的,并且方面类中的其余建议被正确地触发,因此必须有一个问题与AbulJ表达式。

更新:方法中的代码不运行,我不打算在通知中捕获异常。

有什么想法吗?Thx提前。

P.S.Spring框架版本为3.0.6。

共有1个答案

姚树
2023-03-14

这里有几件事对我来说很突出:

  1. 您的切入点是针对您试图捕获它的异常所在的spring包,它应该是您试图加入执行的地方(*com.mypackage…*(…)
  2. 您正在抛出throwable,但不需要声明正在抛出任何内容。通知的异常不会通过此代码传播

尝试的事情:

  1. 将异常参数扩展到Exc0019。也许您正在寻找的异常处于不同的层次结构中。
  2. 将切入点扩展到*包级别-但最好不要同时执行1和2。
  3. 将日志记录增加到更严重的级别,以确保它不会被您的日志框架吞噬。
 类似资料:
  • 问题内容: 我试过了 在主方法中,在start(Stage primaryStage)方法中也是如此。它没有用。 我也试过 异常堆栈跟踪。 在javafx.concurrent.Task $ TaskCallable $ 2.run(Task.java:1251)在com.sun.javafx.application.PlatformImpl $ 3.run(PlatformImpl.java:1

  • 我在Laravel 6中遇到了一个错误。我如何解决这个问题? 致命错误:未捕获的RuntimeException:目录名不能为空。在D:\Xampp\htdocs\tolet\vendor\symfony\finder\Iterator\recursivedirectoryiiterator中。php:54堆栈跟踪:#0 D:\Xampp\htdocs\tolet\vendor\symfony\f

  • 我试图在Jenkins中使用JMeter运行一个非常简单的测试。 JMeter版本2.13 使用windows批处理命令在Jenkins中执行。 在Jenkins中运行作业时,我在控制台输出中收到以下错误消息: 未捕获的异常java.lang.异常。有关详细信息,请参阅日志文件。未捕获的异常java.lang.NoClassDefFoundError:无法初始化类org.apache.jmeter

  • 我无法同时运行TestNG/JUnit的Cucumber TestRunner类。我希望在我的框架中包含Testng和junit。我得到一些abc类错误。我的项目中有所有的依赖项。我这里有2qns。1.当从cucumber junit导入时,我可以在我的cucumber脚本中使用Testng注释吗?2.如何解决错误执行我的testrun。 我错过了什么...如果我错过了什么,请帮我把它修好。

  • 问题内容: 一切都很棒,直到遇到真正需要捕捉例外的地方。当我放置 在 阻止我得到: 在这种情况下我该怎么办? 谢谢, 问题答案: 这是因为,任何一种方法(javadoc链接)都不会引发检查异常。Spring将其转换为DataAccessException之一,它是更通用的运行时异常家族,以抽象出任何特定的基础数据库实现。

  • 那么,为什么它要尝试将响应解析为JSON呢?我该如何解决呢? 谢谢!!