feign程式碼自動生成外掛
阿新 • • 發佈:2020-12-09
簡介
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
。