最近发现开发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接口自动生成工具的更多相关文章

  1. iBatis 代码自动生成工具 iBator 及 Example 使用

    iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“F ...

  2. h5自动生成工具

    一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...

  3. 代码自动生成工具MyGeneration之一(程序员必备工具)

    代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...

  4. Makefile自动生成工具-----autotools的使用(详细)

    相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用.很多GNULinux的的软件都是用它生成Makef ...

  5. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

  6. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  7. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  8. C# 代码自动生成工具

    开源:C# 代码自动生成工具,支持站点前后台   前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...

  9. .NET SourceGenerators 根据 HTTPAPI 接口自动生成实现类

    目录 摘要 元数据分析 使用 Source generators 实现 使用 Source generators 实现程序集分析 使用方法 SourceCode && Nuget pa ...

  10. feign代码自动生成插件

    简介 feign对微服务之间的http调用做了一层封装,如果B项目想调用A项目的一个web服务,只需要编写对应的接口并标注FeignClient注解.但如果接口发生了变更,对应的Feign代码往往会忘 ...

随机推荐

  1. 神经网络优化篇:机器学习基础(Basic Recipe for Machine Learning)

    机器学习基础 下图就是在训练神经网络用到的基本方法:(尝试这些方法,可能有用,可能没用) 这是在训练神经网络时用到地基本方法,初始模型训练完成后,首先要知道算法的偏差高不高,如果偏差较高,试着评估训练 ...

  2. 浅谈数字孪生和GIS融合的必要性

    随着科技的不断发展和应用的不断深入,数字孪生和GIS在各自领域中展现出巨大的潜力.然而,更引人注目的是,数字孪生和GIS的融合将为许多行业带来全新的机遇和变革.在本文中,我们将探讨数字孪生和GIS融合 ...

  3. pytest框架学习-fixture

    一.fixture是什么 被@pytest.fixture()装饰器装饰的函数就是一个fixture,fixture可以灵活的为不同范围的测试用例提供前置和后置操作,以及向测试用例传递测试数据. 二. ...

  4. Java 集合(一)List

    在 Java 中,主要存在以下三种类型的集合:Set.List 和 Map,按照更加粗略的划分,可以分为:Collection 和 Map,这些类型的继承关系如下图所示: Collection 是集合 ...

  5. 如何在IIS上部署docsify以及404问题

    操作步骤 创建一个文件夹,在文件夹中新建2个文件 index.html:入口文件,整个网站只需要这个html文件,其他文件都是md文件 README.md:主页内容,如果没有这个文件,访问时提示404 ...

  6. 君子不玩物丧志,亦常以借物调心,网站集成二次元网页小组件(widget)石蒜模拟器,聊以赏玩

    传世经典<菜根谭>中有言曰:"徜徉于山林泉石之间,而尘心渐息:夷犹于诗书图画之内,而俗气潜消.故君子虽不玩物丧志,亦常借物调心."意思是,徜徉在林泉山石之间,能够摒弃杂 ...

  7. 华为云黄瑾:做强坚实数据底座,GaussDB与产业携手共进

    近日,华为全球智慧金融峰会2023在上海顺利举行,华为云副总裁.战略与产业发展部总裁黄瑾发表了<做强坚实数据底座,GaussDB与产业携手共进>的主题演讲. 以下为演讲实录: 尊敬的各位来 ...

  8. 云图说丨带你了解GaussDB(for Redis)双活解决方案

    摘要:GaussDB(for Redis)推出了双活解决方案,基于GaussDB NoSQL统一架构,通过两个数据库实例之间的数据同步,达成数据的一致性. 本文分享自华为云社区<[云图说]一张图 ...

  9. 2023开发者必备iOS开发工具

    ​ 2023开发者必备iOS开发工具 工欲善其事,必先利其器.进行开发工作时,利用并熟练使用恰当的工具可以让工作效率得到大幅度提高.下边会介绍一些在进行iOS开发工作时常用的一些工具,本文并不对其进行 ...

  10.  iOS代码混淆-从入门到放弃

    ​ iOS代码混淆-从入门到放弃 目录 1. 什么是iOS代码混淆? 2. iOS自动代码混淆的方法是什么? 3. iOS代码混淆的作用是什么? 4. 怎么样才能做到更好的iOS代码混淆? 总结 参考 ...