feign代码自动生成插件
简介
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。

浙公网安备 33010602011771号