feign接口自动生成工具
最近发现开发spring cloud时,编写feign接口是一件痛苦的事,不仅要编写feign接口,还有fallback、请求参数和返回值等,大量重复工作,很浪费时间。
于是便想到可以编写工具自动生成feign接口。
实现起来并不复杂,就是把提供方工程的类加载进来,扫描controller和model生成meta信息,使用模板生成源代码,保存到本地或集中管理feign接口源代码的服务。
本文就简单介绍一下这个自动化工具的使用和核心技术。
spring boot工程feign接口自动工具,含maven插件和cli工具。
一、下载编译
git clone https://gitee.com/xuguofeng2020/feign-generator.git cd feign-generator mvn install
二、Maven插件版
您可以把插件引入到工程中,插件会在编译阶段扫描controller类,生成feign接口元数据并将其发送给中央管理server服务进行集中管理,或在本地保存feign源代码。
1、插件依赖
<plugin>
<groupId>org.net5ijy.cloud</groupId>
<artifactId>feign-generator-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<scanPackage>org.net5ijy.mall.account.controller</scanPackage>
<modelScanPackage>org.net5ijy.mall.account</modelScanPackage>
<manageServerUrl>http://localhost:10001/api/v1/feign/generate</manageServerUrl>
<!-- <local>true</local> -->
</configuration>
</execution>
</executions>
</plugin>
2、参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
| scanPackage | 配置扫描controller的基础包名 | org.net5ijy.cloud |
| modelScanPackage | 配置扫描参数、返回值的基础包名。如果接口参数、返回值类型不在这个包下面,不会加入到model元数据中 | org.net5ijy.cloud |
| manageServerUrl | 集中管理服务接收元数据的接口地址,如果local配置为true,该参数就不会起作用 | - |
| local | 本地保存 | false |
3、Maven编译工程
mvn clean compile
三、Cli命令行版
1、命令示例
cd feign-generator-cli copy scripts\run.bat target cd target ## 本地保存feign接口源代码
run.bat D:\workspace\net5ijy-mall-accountservice\target\net5ijy-mall-accountservice.jar org.net5ijy.mall.account.controller org.net5ijy.mall.account # 或者将feign接口元数据发送给集中管理服务
run.bat D:\workspace\net5ijy-mall-accountservice\target\net5ijy-mall-accountservice.jar org.net5ijy.mall.account.controller org.net5ijy.mall.account remote http://localhost:10001/api/v1/feign/generate
2、参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
| 1 | 工程jar路径 | - |
| 2 | 配置扫描controller的基础包名 | - |
| 3 | 配置扫描参数、返回值的基础包名。如果接口参数、返回值类型不在这个包下面,不会加入到model元数据中 | - |
| 4 | 如何保存feign接口元数据,local - 本地保存,remote - 发送给中央管理server服务 | local |
| 5 | 集中管理服务接收元数据的接口地址 | http://localhost:10001/api/v1/feign/generate |
四、集中管理服务
用于集中管理工程、feign接口源代码、model源代码,提供工程查看、feign接口源代码下载、feign接口及fallback类源代码在线查看、model源代码在线查看等功能。
1、示例服务
数据库配置,编辑application.yml文件,修改datasource相关配置:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql-dba-1:3306/feign
username: system
password: ******
druid:
filters: stat
maxActive: 5
initialSize: 5
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 5
2、打包及运行
cd feign-generator-server-demo mvn clean package cd target java -jar feign-generator-server-demo.jar
3、工程管理页面


4、FeignClient管理页面


5、Model管理页面


6、集成
引入feign-generator-server依赖:
<!-- feign-generator-server -->
<dependency>
<groupId>org.net5ijy.cloud</groupId>
<artifactId>feign-generator-server</artifactId>
<version>1.0.0</version>
</dependency>
在启动类配置组件扫描:
@SpringBootApplication(scanBasePackages = {"org.net5ijy.cloud.feign.demo", "org.net5ijy.cloud.plugin.feign.server"})
@MapperScan({"org.net5ijy.cloud.plugin.feign.server.mapper"})
feign-generator-server会提供查看工程、feign接口、model类的相关接口,如下:
| 接口 | 请求方式 | 作用 | 参数 |
|---|---|---|---|
| /api/v1/feign/{id} | GET | 根据ID查询工程信息 | - |
| /api/v1/feign/search | GET | 根据groupId、projectName分页查询工程 | groupId、projectName、page、size |
| /api/v1/feign/clients | GET | 根据工程ID分页查询feign client | projectId、page、size |
| /api/v1/feign/client/{id} | GET | 根据feign client id查询client | - |
| /api/v1/feign/models | GET | 根据工程ID分页查询model | projectId、page、size |
| /api/v1/feign/model/{id} | GET | 根据ID查询model | - |
| /api/v1/feign/download/{id} | POST | 下载工程的feign client源代码zip文件 | - |
| /api/v1/feign/project/all | GET | 获取全部工程,用于下拉列表等功能 | - |
您可以在已有的管理平台开发前端,使用以上接口获取后台数据进行展示。
五、核心组件
feign-generator-core - core组件提供封装工程、feign client、model元数据的类,free marker模板解析器,controller扫描器,以及用于生成源代码的free marker模板。
feign-generator-plugin - Maven插件。
feign-generator-server - 为集中管理服务提供接口能力。
feign-generator-cli - 命令行工具,提供的能力和maven插件基本相同。
feign-generator-server-demo - 集中管理服务示例。
六、核心技术
maven插件开发
动态类加载
java反射技术
free marker模板技术
feign接口自动生成工具的更多相关文章
- iBatis 代码自动生成工具 iBator 及 Example 使用
iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“F ...
- h5自动生成工具
一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...
- 代码自动生成工具MyGeneration之一(程序员必备工具)
代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...
- Makefile自动生成工具-----autotools的使用(详细)
相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用.很多GNULinux的的软件都是用它生成Makef ...
- Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...
- springboot成神之——swagger文档自动生成工具
本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...
- 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)
TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...
- C# 代码自动生成工具
开源:C# 代码自动生成工具,支持站点前后台 前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...
- .NET SourceGenerators 根据 HTTPAPI 接口自动生成实现类
目录 摘要 元数据分析 使用 Source generators 实现 使用 Source generators 实现程序集分析 使用方法 SourceCode && Nuget pa ...
- feign代码自动生成插件
简介 feign对微服务之间的http调用做了一层封装,如果B项目想调用A项目的一个web服务,只需要编写对应的接口并标注FeignClient注解.但如果接口发生了变更,对应的Feign代码往往会忘 ...
随机推荐
- redis集群搭建注意事项
官方教程:https://redis.io/docs/management/scaling/ 其他参考: https://note.youdao.com/ynoteshare/index.html?i ...
- Selenium接管已经打开的浏览器并爬取数据
""" P.S:需要接管现有浏览器 ** 使用步骤: 1.打开浏览器,设置好远程调试端口,并扫描登录淘宝. chrome.exe --remote-debugging-p ...
- 【C#】【命名空间(namespace)】.NET6.0后支持的顶级语句使用问题
创建C#项目且使用.Net6.0以上的版本时,默认code会使用顶级语句形式: 1.略去static void Main(String[ ] args)主方法入口: 2.隐式使用(即隐藏且根据代码所需 ...
- pytest框架学习-pytest_addoption钩子函数
适用场景:一套自动化代码,多套环境. pytest_addoption 允许用户自定义注册一个命令行参数,方便用户通过命令行参数的形式给 pytest 传递不同的参数进行不同测试场景的切换. pyte ...
- MinIO客户端之stat
MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc stat 获取指定桶或者对象的信息,包含对象的元数据. 指定桶bkt1,查看信息,命令如下: ./mc st ...
- Ribbon:Spring Cloud负载均衡与服务调用组件
Ribbon:Spring Cloud负载均衡与服务调用组件 问题总结 负载均衡? Ribbon实现服务调用? Ribbon实现负载均衡? 切换负载均衡策略? 定制负载均衡策略? 问题答案 负载均衡 ...
- 使用Java 17中的record替代Lombok的部分功能
在DD长期更新的Java新特性专栏中,已经介绍过Java 16中开始支持的新特性:record的使用. 之前只是做了介绍,但没有结合之前的编码习惯或规范来聊聊未来的应用变化.最近正好因为互相revie ...
- UE5: 探究Actor Tick的注册与执行
1. 前情提要 因工作需要,有在编辑器模式下执行Actor的Tick函数的需求.经过查阅资料,了解到重载Actor::ShouldTickIfViewportOnly函数可以实现在编辑器视口下也可以执 ...
- QT OpenGLWidget高分屏适配时出现的问题
参考官方文档,为了解决4K屏幕显示QT界面时出现窗口变小分辨率不匹配的问题,我们可以在 QApplication a(argc, argv); 这句之前添加: #if (QT_VERSION > ...
- 你要了解的 OpenAI 那些事:创立简史,技术背景等
原文: https://openaigptguide.com/what-is-openai/ OpenAI 是一家人工智能研究公司,成立于2015年,总部位于美国旧金山.目前,OpenAI由创始人Sa ...