spring API扫描插件
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扫描插件相关推荐
- Spring Boot Maven插件
Spring Boot Maven插件提供了使用Spring Boot应用程序步骤如下: 重新打包:创建一个可自动执行的jar或war文件.它可以替换常规工件,或者可以使用单独的分类器附加到构建生 ...
- vue分页+spring boot +分页插件pagehelper
vue分页+spring boot +分页插件pagehelper https://blog.csdn.net/baidu_38603246/article/details/98854013
- spring api层打包_Spring项目的按层打包已过时
spring api层打包 我认为Spring应用程序不应该以逐层方法构造. 在我看来,按功能打包更有意义. 首先,让我简要描述每种方法. "按层打包"(在非Java世界中为&qu ...
- spring 组件扫描_避免不必要的Spring配置组件扫描
spring 组件扫描 我在堆栈溢出中遇到了一个有趣的问题. Brett Ryan有问题,Spring Security配置被初始化了两次. 当我查看他的代码时,我发现了问题所在. 让我展示显示代码. ...
- 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件
背景: 我们在公司(好未来)内部开发了一套基于 SonarQube 的静态代码扫描服务,得益于 SonarQube 开源版本本身的功能,我们可以直接复用支持主流的编程语言,但 SonarQube 的开 ...
- 【资料】翘首期盼247天!《阿里巴巴Java开发手册》扫描插件详情介绍
引言:自从2月9日<阿里巴巴Java开发手册>面向业界公布以来,大家一直期待着静态化扫描工具的问世,在<手册>终极版发布时,我们曾经承诺将在2017杭州云栖大会上进行规约插件的 ...
- 【Eclipse】Spring Tool Suite插件
Spring Tool Suite插件 最新下载地址:https://spring.io/tools3/sts/all 以前下载地址:https://spring.io/tools3/sts/lega ...
- idea 编码扫描插件_用IDEA这样Review代码真牛逼
一个对项目负责的团队代码质量检查是必不可少的,有条件的团队经常有代码review习惯,这样可以使技术团队共同进步,但是一个庞大的工程做代码review其实是很麻烦的,所以就催生了很多的工具,今天我们就 ...
- 一个不错的金蝶KIS专业版条码扫描插件
一个不错的金蝶KIS专业版条码扫描插件 插件简介: 本插件主要为满足金蝶KIS出入库数据的条码快速扫描而开发.在金蝶KIS里条码扫描有一个非常不方便的地方,就是扫描完一个物料之后一定要进行键盘或鼠标操 ...
最新文章
- NTU生活:NTU景点
- 基于uml的系统分析的网上商城_UML建模工具Enterprise Architect最新版有哪些新功能呢?立即查看...
- salad--8||9
- 解决在Mac上用pyenv安装python3失败的问题
- react入门--------安装react
- 命令行下一种新的加帐号的方法
- mysql注入技巧原理_MySQL注入技巧总结
- C++的hashmap和Java的hashmap
- 移动电商营销吸睛法宝----图标、标签
- 搜索引擎的那些事(32位MD5算法)
- java 拷贝属性值_Java 反射拷贝相同的属性值到指定对象中(两种实现方式)
- 新建cordova应用,插件开发教程系列(总目录)
- sql azure 语法_方便SQL笔记本,用于在Azure Data Studio中进行故障排除
- 电大数据库应用技术形考3_华为荣耀路由3体验:Wi-Fi6技术成熟应用,真正的平民好路由...
- ACM-ICPC训练行动路线图
- PGM:图模型学习概述
- Streaming源码解读 updateStateByKey-1
- Solidworks:Solidworks2016软件程序破解详细攻略说明(也适合长时间没使用SW2016再次破解)
- 中颐软启动器说明书_中颐软启动器维修
- unity3d 破解