feign-maven-plugin

a project generating feign code

License

License

Categories

Categories

Maven Build Tools Feign Net HTTP Clients
GroupId

GroupId

com.github.dewxin
ArtifactId

ArtifactId

feign-maven-plugin
Last Version

Last Version

1.0.0
Release Date

Release Date

Type

Type

maven-plugin
Description

Description

feign-maven-plugin
a project generating feign code
Project URL

Project URL

https://github.com/dewxin/feign-maven-plugin
Source Code Management

Source Code Management

https://github.com/dewxin/feign-maven-plugin.git

Download feign-maven-plugin

How to add to project

<plugin>
    <groupId>com.github.dewxin</groupId>
    <artifactId>feign-maven-plugin</artifactId>
    <version>1.0.0</version>
</plugin>

Dependencies

compile (4)

Group / Artifact Type Version
commons-io : commons-io jar 2.4
org.springframework.boot : spring-boot-loader jar 2.3.3.RELEASE
org.apache.maven : maven-plugin-api jar 3.6.3
org.apache.maven : maven-project jar 2.2.1

provided (1)

Group / Artifact Type Version
org.apache.maven.plugin-tools : maven-plugin-annotations jar 3.6.0

Project Modules

There are no modules declared in this project.

简介

feign对微服务之间的http调用做了一层封装,如果B项目想调用A项目的一个web服务,只需要编写对应的接口并标注FeignClient注解。但如果接口发生了变更,对应的Feign代码往往会忘记修改,而且问题往往在服务启动之后才能发现。

feign-maven-plugin根据当前项目的jar包,自动生成对应feign部分的代码,并install到本地仓库。使用时,只需要在pom.xml中添加对应的依赖,在项目中继承自动生成的Feign接口,添加FeignClient注解即可。

如何使用

生成feign工程并添加依赖

在你需要生成对应feign代码的项目pom.xml文件中添加以下配置。我们暂且称其为feign源工程,根据源工程生成feign工程,我们会在feign使用工程中调用feign工程中的代码。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.github.dewxin</groupId>
            <artifactId>feign-maven-plugin</artifactId>
            <version>1.0.0</version><!-- 使用最新版本 -->
            <executions>
                <execution>
                    <goals>
                        <goal>feign</goal>
                    </goals>
                    <phase>package</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

注意:此处<plugin>标签需要放置在spring-boot-maven-plugin之后。

在项目根目录,使用mvn packge对项目进行打包。控制台输出观察到以下日志则表示生成的feign工程已经install本地仓库

[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD SUCCESS
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time:  3.944 s
[INFO] [INFO] Finished at: 2020-12-08T20:09:55+08:00
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] <<< <<< finish phase maven-install <<< <<<

假如feign源工程的pom部分配置如下:

<groupId>source-groupId</groupId>
<artifactId>source-artifactId</artifactId>
<version>1.0.2</version>

那么生成的feign工程对应pom配置会是这样:除了artifactId根据原有的值添加-feign后缀外,其余的部分不发生改变。

<groupId>source-groupId</groupId>
<artifactId>source-artifactId-feign</artifactId>
<version>1.0.2</version>

feign使用工程中 只需要添加如下的依赖即可以使用,需要注意的是生成的feign工程会被install到本地仓库。

<dependency>
    <groupId>source-groupId</groupId>
    <artifactId>source-artifactId-feign</artifactId>
    <version>1.0.2</version>
</dependency>

如果你在application.properties中配置的spring.application.name的值为SERVICE-SOURCE,SOURCE-SERVICE,source,SOURCE中的任意一个,那么生成对应feign接口的名字则为SourceClient

import com.github.dewxin.generated.auto_client.SourceClient;

@FeignClient(value="SERVICE-SOURCE", contextId = "feign")
public interface SourceFeignClient extends SourceClient {
}

此处需要添加 contextId,否则的话feign会生成两个同名的bean

Versions

Version
1.0.0