一、场景

假设我有2个服务xxx-commonxxx-auth ,3个异常处理器。

目录结构如下:

xxx-common   公共类存放的jar包

自定义的  ApiExceptionHandler 类 有2个异常处理器,分别是:

                     ① ApiException.class   

                     ② Exception.class

xxx-auth          Shiro授权认证的jar包

        自定义的 AuthorizationExceptionHandler 类 只有1个异常处理器:

AuthorizationException.class

二、问题

那么,在我A服务引入这两个包的同时,如果我报的是 AuthorizationException 异常,有可能会先走 xxx-common 包下的

ApiExceptionHandler 类 中的 ② Exception.class 异常处理器,这并不是我想要的结果。

三、解决办法

通过源码可以知道Spring的异常处理器是根据异常处理器被加载的顺序来顺序执行,

比如:A->B->C ,那么如果B符合抛出异常的条件,就会直接抛出,然而我们真正需要被执行的C可能就执行不到了。

此时,可以通过 @Order 注解来指定实体Bean被加载到Spring容器的顺序,注解中的值越小越优先加载。

@Order(1)//指定该实体bean被加载的顺序,注解中的值越小越优先被加载注入。
@RestControllerAdvice
public class AuthorizationExceptionHandler {@ExceptionHandler(AuthorizationException.class)public Code handleAuthorizationException(AuthorizationException e) {log.error("没有权限的异常信息:", e);return Code.NOT_PERMISSION.setErrCode(new Code().setMsg(e.getMessage()));}}

四、结论

其实,多个服务间多个自定义的ExceptionHandler类的执行顺序就是被Spring加载到容器中Bean加载顺序。

五、另外

在同一个自定义的ExceptionHandler类,定义多个异常处理器,他们的加载顺序如何决定?

结论:是由 ExceptionHandlerMethodResolver 通过递归查找调用链,内部自己判断决定的。调用链越小,执行度越高。

详情请看此链接:(转载)https://juejin.im/post/5d022d50f265da1bb564f374

多个服务间多个自定义的ExceptionHandler类的执行顺序相关推荐

  1. gRPC-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) 场景:A服务主动发起 ...

  2. .NET Core使用gRPC打造服务间通信基础设施

    一.什么是RPC rpc(远程过程调用)是一个古老而新颖的名词,他几乎与http协议同时或更早诞生,也是互联网数据传输过程中非常重要的传输机制. 利用这种传输机制,不同进程(或服务)间像调用本地进程中 ...

  3. 怎么看调用的接口_SpringCloud服务间调用

    本篇简介 在上一篇我们介绍了SpringCloud中的注册中心组件Eureka.Eureka的作用是做服务注册与发现的,目的是让不同的服务与服务之间都可以通过注册中心进行间接关联,并且可以通过注册中心 ...

  4. 再见 Feign!推荐一款微服务间调用神器,跟 SpringCloud 绝配!

    在微服务项目中,如果我们想实现服务间调用,一般会选择Feign.之前介绍过一款HTTP客户端工具Retrofit,配合SpringBoot非常好用!其实Retrofit不仅支持普通的HTTP调用,还能 ...

  5. 如何缩小安全漏洞爆炸半径,实现服务间零信任安全?

    作者:王夕宁, 奇方 近日国内外多家安全机构监测到 Apache Log4j 存在任意代码执行漏洞(漏洞编号:CVE-2021-44228),未取得身份认证的用户,可以从远程发送数据请求输入数据日志, ...

  6. Spring Boot微服务间文件返回实现

    Feign接口获取文件流问题_Java_wyazyf的博客-CSDN博客 https://blog.csdn.net/wyazyf/article/details/93200033 Spring Bo ...

  7. Spring Cloud Alibaba 之 服务通信 REST消息通信:如何使用 OpenFeign 简化服务间通信

    上一讲我们学习了 Ribbon 与 RestTemplate 两个组件.Ribbon 提供了客户端负载均衡,而 RestTemplate 则封装了 HTTP 的通讯,简化了发送请求的过程.两者相辅相成 ...

  8. SpringCloud采坑之Feign服务间调用默认返回xml

    2019独角兽企业重金招聘Python工程师标准>>> 日前在使用SpringCloud的时候,需要用到服务间的调用,采用Feign进行调用,但是默认返回了xml格式的数据,比较坑爹 ...

  9. Istio:一个用于微服务间通信的服务网格开源项目

    http://www.infoq.com/cn/news/2017/05/istio Istio:一个用于微服务间通信的服务网格开源项目 Google.IBM和Lyft开源了微服务管理.保护和监控框架 ...

最新文章

  1. 【干货】史上最全的Tensorflow学习资源汇总,速藏!
  2. pythonapp下载-python编程狮app下载
  3. php中浮点型的精确度,PHP中的浮点精度和类型
  4. 腾讯云服务器 - 定时备份MariaDB/MySQL
  5. 数据挖掘-二手车价格预测 Task02:数据分析
  6. 软件工程项目之Windows Phone Application的一个设想
  7. input标签上传文件(一篇搞定)
  8. html中的字体怎么选择,网页开发中如何选取合适且统一的字体
  9. IM 产品设计思考(4)- 问答机器人
  10. java:找不到符号
  11. 腾讯的星星海服务器芯片,腾讯云星星海重磅发布两款自研新品 打造软硬一体云计算基础设施...
  12. mace micro 代码分析: netdef 和Graph文件的生成
  13. 首台android手机号码,国内首批手机Android 12尝鲜列表已公布,华为与荣耀不在名单之上...
  14. 微信小程序 ---在Vscode上编辑,微信开发者工具上预览,快速上手
  15. 毕设第三周(12月19日——12月25日)
  16. 你好,法语!A2课文汇总
  17. 面试专家职位面试官会问什么
  18. 洗稿,技术上怎么判断文章相似性?
  19. android 监听来电去电,Android监听来电和去电的实现方法
  20. 案例5:Java大学生创新创业项目管理设计与实现任务书

热门文章

  1. 2017sc 膜你赛9 比赛笔记
  2. Manasa and Combinatorics
  3. 《专门替中国人写的英语语法》(四)
  4. 如何在JS中应用正则表达式
  5. kissy 淘宝网脚本库
  6. 一条SQL引发的“血案”:与SQL优化相关的4个案例
  7. 让我去健身的不是漂亮小姐姐,居然是贝叶斯统计
  8. 2018世界杯数据清单:真球迷看球必备,伪球迷速成指南(附完整赛程)
  9. LwIP之网络接口管理
  10. FreeRTOS协程