1. 简介

本项目是基于gamma的一个插件

  • gamma

    • github
    • gitee
    • csdn

本项目是用来扫描一个spring的项目中有多少个Api接口,然后收集
这个API接口的入参/出参信息统计后通过http发送给后端服务

项目地址:

github
gitee

1.1 使用场景

在微服务背景下 服务之间有大量的RPC,那么当下游服务接口更变后没有及时通知
到对应的上游服务,就会导致上游接口报错

那是否可以在CI流水线中采集已经打包好的业务JAR的接口,然后把采集到的信息都统一交给一个服务储存,如果发现有服务的接口发生了变更,将会自动通知对应上游服务
的负责人

那么基于上述场景,本插件的作用就是用于采集接口信息,然后把采集到的信息发送给对应的服务端。

2. 架构设计

本插件将会扫描对应项目里所有的class文件,然后查找对应的springMVC的接口注解
@RequestMapping / @GetMapping / @PostMapping … 等来判断这是不是一个接口

同时,也会去检查对应打了注解的方法的入参返回值的数据结构状况,来生成一个唯一的hash值,用于标记对应接口是否变更过

这里可以正确解析对应的包装类Optional<User> 以及 List<User>这样的包装类,会去检查User对象的数据结构,而不是外包装类型

当接口入参返回值 新增、删除、修改字段名称 对应的hash值才会改变,而调整接口字段顺序是不会更变hash值的
如:


public class User {String name;int age;
}
public class User {int age;String name;
}

上述改变将不会更变hash值

3. 快速使用

/dist目录下有编译后的插件

或者clone仓库后执行

mvn clean package

后生成对应的插件

放入gamma中执行命令

  • gamma使用方式

    • github
    • gitee
java -jar gamma-bootstrap.jar source=你要扫描的jar路径

4. 参数配置

提供以下参数

endpoint.topology.host=收集结束后发送给的服务域名(必填)
ref=本次采集的项目分支(必填)
commitId=本次采集的项目的commitId(必填)
appName=应用名称(必填)

5.嵌入式执行

如果不想使用插件这么麻烦,那么可以使用gamma的嵌入执行模式来执行

需要先安装gamma-embed模块

    @org.junit.Testpublic void test() {Map<String, String> config = new HashMap<>();config.put("endpoint.topology.host","127.0.0.1:8080");config.put("ref","master");config.put("commitId","1234567");config.put("appName","1234567");config.put("scan.package","com.chy,com.chy2,com.example");GammaContainer gammaContainer =new GammaContainer("你要扫描的jar路径", config);gammaContainer.start(new SpringApiScanProcession());}

6. 接收端

当采集完成后将会发送请求 post ${endpoint.topology.host}/api/signature 到服务端

requestBody

以json的形式发送

@Data
@Builder
public class ProjectApiSignatureFrom {String commitId; String appName;String ref;List<ApiSignatureFrom> apiSignature;}

这里 ApiSignatureFrom 中存放了所有接口的信息

@Data
@Builder
public class ApiSignatureFrom {String methodType;String url;String signature;
}

这里的 signature就将是接口的签名了, 是一个 32位的hash值, 如果接口的入参/返回值改变这里将会改变

spring API扫描插件相关推荐

  1. Spring Boot Maven插件

    Spring Boot Maven插件提供了使用Spring Boot应用程序步骤如下:   重新打包:创建一个可自动执行的jar或war文件.它可以替换常规工件,或者可以使用单独的分类器附加到构建生 ...

  2. vue分页+spring boot +分页插件pagehelper

    vue分页+spring boot +分页插件pagehelper https://blog.csdn.net/baidu_38603246/article/details/98854013

  3. spring api层打包_Spring项目的按层打包已过时

    spring api层打包 我认为Spring应用程序不应该以逐层方法构造. 在我看来,按功能打包更有意义. 首先,让我简要描述每种方法. "按层打包"(在非Java世界中为&qu ...

  4. spring 组件扫描_避免不必要的Spring配置组件扫描

    spring 组件扫描 我在堆栈溢出中遇到了一个有趣的问题. Brett Ryan有问题,Spring Security配置被初始化了两次. 当我查看他的代码时,我发现了问题所在. 让我展示显示代码. ...

  5. 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件

    背景: 我们在公司(好未来)内部开发了一套基于 SonarQube 的静态代码扫描服务,得益于 SonarQube 开源版本本身的功能,我们可以直接复用支持主流的编程语言,但 SonarQube 的开 ...

  6. 【资料】翘首期盼247天!《阿里巴巴Java开发手册》扫描插件详情介绍

    引言:自从2月9日<阿里巴巴Java开发手册>面向业界公布以来,大家一直期待着静态化扫描工具的问世,在<手册>终极版发布时,我们曾经承诺将在2017杭州云栖大会上进行规约插件的 ...

  7. 【Eclipse】Spring Tool Suite插件

    Spring Tool Suite插件 最新下载地址:https://spring.io/tools3/sts/all 以前下载地址:https://spring.io/tools3/sts/lega ...

  8. idea 编码扫描插件_用IDEA这样Review代码真牛逼

    一个对项目负责的团队代码质量检查是必不可少的,有条件的团队经常有代码review习惯,这样可以使技术团队共同进步,但是一个庞大的工程做代码review其实是很麻烦的,所以就催生了很多的工具,今天我们就 ...

  9. 一个不错的金蝶KIS专业版条码扫描插件

    一个不错的金蝶KIS专业版条码扫描插件 插件简介: 本插件主要为满足金蝶KIS出入库数据的条码快速扫描而开发.在金蝶KIS里条码扫描有一个非常不方便的地方,就是扫描完一个物料之后一定要进行键盘或鼠标操 ...

最新文章

  1. NTU生活:NTU景点
  2. 基于uml的系统分析的网上商城_UML建模工具Enterprise Architect最新版有哪些新功能呢?立即查看...
  3. salad--8||9
  4. 解决在Mac上用pyenv安装python3失败的问题
  5. react入门--------安装react
  6. 命令行下一种新的加帐号的方法
  7. mysql注入技巧原理_MySQL注入技巧总结
  8. C++的hashmap和Java的hashmap
  9. 移动电商营销吸睛法宝----图标、标签
  10. 搜索引擎的那些事(32位MD5算法)
  11. java 拷贝属性值_Java 反射拷贝相同的属性值到指定对象中(两种实现方式)
  12. 新建cordova应用,插件开发教程系列(总目录)
  13. sql azure 语法_方便SQL笔记本,用于在Azure Data Studio中进行故障排除
  14. 电大数据库应用技术形考3_华为荣耀路由3体验:Wi-Fi6技术成熟应用,真正的平民好路由...
  15. ACM-ICPC训练行动路线图
  16. PGM:图模型学习概述
  17. Streaming源码解读 updateStateByKey-1
  18. Solidworks:Solidworks2016软件程序破解详细攻略说明(也适合长时间没使用SW2016再次破解)
  19. 中颐软启动器说明书_中颐软启动器维修
  20. unity3d 破解

热门文章

  1. CRS-2101:The OLR was formatted using version 3
  2. kube-prometheus实现企业微信机器人告警
  3. 数据链路层以太网帧格式----理解MTU的定义和最大值(1500字节)
  4. sql删除无人借阅的书_查找,下载,借阅,租赁和购买电子书的最佳网站
  5. Trie树沉思录(1)
  6. 单页面的网站怎么做呢?seo不做竞价,只要权重
  7. 高中计算机手抄报图片大全集,高中科技节手抄报图片大全
  8. 记录--手把手带你开发一个uni-app日历插件(并发布)
  9. 如何查询社保的个人编号?
  10. vue2仿网易云音乐网页版