有没有精通springmvc的大神,我搭建了一个springboot的项目,自己定义了一个异常处理类,通过@ControllerAdvice注解拦截所有controller的异常,然后@ExceptionHandler定义了一个异常处理方法,按理说所有Controller的异常应该都会被这个方法处理才对,本来在服务器运行也是正常的,但是运行一段时间后就失效了,而改用springboot默认的异常处理类ResponseStatusExceptionResolver处理,有人知道是怎么回事吗?下面是我的代码截图
下面是运行日志的截图
可以看到,运行正常的时候都可以正常拿到BusinessExceptionHandler的异常处理bean,但是一段时间之后就不行了,下面是异常的截图
是不是这个bean运行一段时间之后被销毁了,求大神解答
这两张截图是不同的controller抛出的异常,请确认下,是过了一段时间的原因,
还是由于不同controller的原因。
还有,在org.springframework.web.servlet.DispatcherServlet#processHandlerException方法设置断点,
查看handlerExceptionResolvers的存放顺序,并且跟踪进去看看同样是BusinessException时,
有什么其他不同导致使用不同的ExceptionHandler。(我没有source,也不确定到底能否看到有用的信息)
是过了一段时间之后的异常了,本来我是弄了全局的异常处理,但是在服务器运行一段时间之后就捕获不到异常了,本地调试没法复现,这是最麻烦的,只有在服务器上跑了一段时间之后才会出现这个问题。我有跟踪进去ExceptionHandlerExceptionResolver里面的代码,发现spring启动的时候对@Exception注解的类用exceptionHandlerAdviceCache做了缓存,不知道是不是这个缓存被清空,导致拿不到BusinessExceptionHandler?
就是缓存被清空了,你有不是@Exception和bussinessException里面的异常