1. 程式人生 > 實用技巧 >feign程式碼自動生成外掛

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