Spring Boot 2下使用Feign找不到@EnableFeignClients的解決辦法
最近在實踐Spring Boot 2+Spring Cloud(Finchley.M9),在用到Feign
的時候發現@EnableFeignClients
註解開不了,獨立使用Feign是可以的,但就是開啟不了Spring對Feign的支援.經過一番摸索終於把問題解決了,在這裡分享一下解決方案和思路.解決思路寫得較繁瑣,可以選擇性閱讀,結論和解決方案寫在前面
0. 結論和解決方案
Spring Cloud對Feign的支援由org.springframework.cloud:spring-cloud-netflix-core
移到org.springframework.cloud:spring-cloud-openfeign-core
Finchley.M9
版本下的spring-cloud-starter-openfeign:2.0.0.M2的pom依賴檔案中匯入的是spring-cloud-netflix-core
而非spring-cloud-openfeign-core
,需要我們在pom檔案中新增對應依賴管理使spring-cloud-starter-openfeign版本更新到2.0.0.RC1
,如下圖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId >
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.0.0.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1. 建立專案
為了方便講解分析,這裡使用idea建立一個新的SpringBoot+Spring Cloud的Feign專案,一切設定保持預設
專案依賴僅勾選Web和Feign
下面貼出專案初始化的pom檔案的依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
這個時候可以看到在主程式上用不了@EnableFeignClients
註解
2. @EnableFeignClients的位置
問題很明顯就是缺少包了,那就先找找@EnableFeignClients是在哪個包裡,利用idea的工具,可以看到該註解是在
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-core</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
將其匯入pom,檢視import資訊,這個時候@EnableFeignClients註解的全限定名是org.springframework.cloud.netflix.feign.EnableFeignClients
(重要,後面會提到)
試一下啟動,意料之中地報錯了,錯誤是org.springframework.beans.factory.BeanDefinitionStoreException
不過這並不要緊,重要是找到了@EnableFeignClients註解在哪裡,現在把剛才pom新增的依賴去掉再來看看專案原本的依賴樹
可以看到專案本來就有org.springframework.cloud:spring-cloud-netflix-core:2.0.0.M8
.
那是不是說明2.0.0.M8
中沒有@EnableFeignClients註解而1.3.5.RELEASE
有呢?很有可能,筆者特地去找了這兩個jar包,解壓後比較如下:
很直觀地看到,Spring Cloud的spring-cloud-netflix-core版本中少了很多東西,其中就包括Feign資料夾,而我們要的@EnableFeignClients和@FeignClient註解就在這個資料夾下
到這裡問題已經很清晰了,高版本的Spring Cloud使用的Feign註解不在原來的位置,也不在spring-cloud-openfeign下,所以自然就找不到了
那新的問題又來了,高版本的Spring Cloud使用的Feign註解在哪裡,又該如何匯入呢?
這裡還是從官方提供的依賴入手,下面是官方提供的OpenFeign Quick Start最新教程
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.0.0.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies><repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
如上,與專案原本的pom相比,就只是在dependencyManagement(宣告依賴,並不實現引入)下多了個org.springframework.cloud: spring-cloud-openfeign:2.0.0.RC1
的dependency版本管理.將其引入,即在pom檔案中增加如下內容
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.0.0.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
發現@EnableFeignClients
沒有提示錯誤了,這時候再來看看專案依賴樹
對比一下上面M2版本的依賴樹,可以很明顯地看到與Feign相關的依賴包的變化是org.springframework.cloud:spring-cloud-netflix-core
換成了org.springframework.cloud:spring-cloud-openfeign-core
直接看一下import資訊,發現註解的類名為org.springframework.cloud.openfeign.EnableFeignClients
,與上面看到的做對比,就可以發現@EnableFeignClients
註解由org.springframework.cloud.netflix.feign.EnableFeignClients
換為org.springframework.cloud.openfeign.EnableFeignClients
即在M2版本中@EnableFeignClients的類已經換了,但對應的spring-cloud-starter-openfeign下的依賴卻沒有更新,所以就找不到對應的類了
知道原因,那我們再來看看org.springframework.cloud:spring-cloud-openfeign-core
這個包的內容
對比一下上面org.springframework.cloud:spring-cloud-netflix-core的內容,就會發現兩者幾乎一樣,這也驗證了我們的想法
由此,我們可以得出結論:
Spring Cloud對Feign的支援由org.springframework.cloud:spring-cloud-netflix-core
移到org.springframework.cloud:spring-cloud-openfeign-core
下,而Finchley.M9
版本下的spring-cloud-starter-openfeign:2.0.0.M2的pom依賴檔案中匯入的是spring-cloud-netflix-core
而非spring-cloud-openfeign-core
,需要我們在pom檔案中新增對應依賴管理使spring-cloud-starter-openfeign版本更新到2.0.0.RC1
3. 官方專案日誌
最後,再來看看官方專案日誌(可以直接去github上面看):
呃,2.0.0.M2和2.0.0.RC1都被回滾了…,現在用的還是2.0.0.BUILD-SNAPSHOT,不過現在(2018年4月25日)官方教程給的current版本是2.0.0.RC1,而且目前沒發現問題(至少不會像2.0.0.M2那麼坑),所以先用著應該是可以的
相關推薦
Spring Boot 2下使用Feign找不到@EnableFeignClients的解決辦法
最近在實踐Spring Boot 2+Spring Cloud(Finchley.M9),在用到Feign的時候發現@EnableFeignClients註解開不了,獨立使用Feign是可以的,但就是開啟不了Spring對Feign的支援.經過一番摸索終於把問題
spring boot 搭建框架錯誤: 找不到或無法載入主類
最近在學習spring boot相關知識,照著spring boot 官方網站新建了一個簡單的demo,啟動時卻一直報:找不到或無法載入主類,也沒有任何其他的提示資訊,這下咋辦?1、首先我去百度搜索了我這樣的情況,參考瞭如下這篇博文: https://blog.
其他問題總結,容易出現,又找不到解決辦法
1.之前有聲音,一拔一插耳機沒聲音 解決辦法:控制面板->硬體和聲音->Realtek高清音訊管理器 點選下圖資料夾 出現後點擊對號,點確定。重新插上耳機。 ok,看看能不能解決,反正我的解決了
Eclipse Git提交程式碼,多了一個“工程同名的資料夾”,找不到解決辦法!!!
提交程式碼到Git倉庫,有2種方式。第1種,先在OSChina等平臺建立git專案,本地clone,再在本地修改程式碼提交。√這種方式,沒任何問題。不過,我平時不喜歡這麼幹。第2種,本地已經有了專案,需要提交到git上。×分享程式碼到Git遠端倉庫的時候,本地首先需要建立本地
springboot工程maven打包時,如果有依賴工程總是報找不到,解決辦法
引用原文: 原文地址 最近公司使用springboot開發專案,使用的構建工具是maven,專案分了很多模組,並且模組之間還存在一定的依賴,比如說一個專案common是提供各專案通用的工具類,公共的類等例子:專案root,有module common,front,mall
使用cardview 屬性找不到解決辦法
CardView也是5.0的新控制元件,這控制元件其實就是一個卡片,當然我們自己也完全可以定義這樣一個卡片,從本質上看,可以將CardView看做是FrameLayout在自身之上添加了圓角和陰影效果。請注意:CardView被包裝為一種佈局,並且經常在List
vmware,virtualbox 虛擬機器Linux系統複製或克隆後網路連不上,網絡卡找不到解決辦法
現在很多Linux發行版使用udev動態管理裝置檔案,並根據裝置的資訊對其進行持久化命名. udev會在系統啟動過程中識別網絡卡,將MAC地址和網絡卡名稱對應起來記錄在udev規則檔案中. /etc/udev/rules.d/*-net.rules CentOS: 70-p
Spring Boot 2.4.0正式釋出,全新的配置檔案載入機制(不向下相容)
> 千里之行,始於足下。關注公眾號【**BAT的烏托邦**】,有Spring技術棧、MyBatis、JVM、中介軟體等小而美的**原創專欄**供以免費學習。分享、成長,拒絕淺嘗輒止。本文已被 [**https://www.yourbatman.cn**](https://www.yourbatman.cn)
阿裏P9告訴你 Spring Boot 2.0正式發布,升還是不升呢?
Java spring spring Boot Spring帝國Spring幾乎是每一位Java開發人員都耳熟能詳的開發框架,不論您是一名初出茅廬的程序員還是經驗豐富的老司機,都會對其有一定的了解或使用經驗。在現代企業級應用架構中,Spring技術棧幾乎成為了Java語言的代名詞,那麽Spring
spring-boot-2.0.3不一樣系列之源碼篇 - run方法(二)之prepareEnvir
config ace let fff 輸出 cloud 通過 什麽事 來看 前言 此系列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麽事。如果大家對springboot的源碼有所研究,可以挑些自己感興趣或者對自己有
spring-boot-2.0.3不一樣系列之源碼篇 - run方法(三)之createApplicationContext,絕對有值得你看的地方
處理 gen 利用反射 mva 默認 .get war close -s 前言 此系列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麽事。如果大家對springboot的源碼有所研究,可以挑些自己感興趣或者對自己有
spring-boot-2.0.3不一樣系列之源碼篇 - run方法(四)之prepareContext,絕對有值得你看的地方
release led 設置 get handler htm encoding 列表創建 splay 前言 此系列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麽事。如果大家對springboot的源碼有所研究,可
spring-boot-2.0.3之redis快取實現,不是你想的那樣哦!
前言 開心一刻 小白問小明:“你前面有一個5米深的坑,裡面沒有水,如果你跳進去後該怎樣出來了?”小明:“躺著出來唄,還能怎麼出來?”小白:“為什麼躺著出來?”小明:“5米深的坑,還沒有水,跳下去不死就很幸運了,殘是肯定會殘的,不躺著出來,那能怎麼出來?”小白:“假設沒死也沒殘呢?”小明:“你當
spring-boot-2.0.3之redis快取實現,不是你想的那樣哦
前言 開心一刻 小白問小明:“你前面有一個5米深的坑,裡面沒有水,如果你跳進去後該怎樣出來了?”小明:“躺著出來唄,還能怎麼出來?”小白:“為什麼躺著出來?”小明:“5米深的坑,還沒有水,跳下去不死就很幸運了,殘是肯定會殘的,不躺著出來,那能怎麼出來?”小白:“假設沒死也沒殘呢?”小明:“你當我超
Spring Boot 2程式不能載入 com.mysql.jdbc.Driver 問題
用Spring Boot Starter 嚮導生成了一個很簡單SpringBoot程式, 用到了 MySQL, 總是下面不能載入 Mysql driver class 錯誤. Cannot load driver class: com.mysql.jdbc.Driver
spring-boot-2.0.3不一樣系列之原始碼篇 - 階段總結
前言 開心一刻 朋友喜歡去按摩,第一次推門進來的是一個學生美眉,感覺還不錯;後來經常去,有時是護士,有時是空姐,有時候是教師。昨天晚上推門進去的是一個女警察,長得賊好看,身材也很好,朋友嗷的一聲就撲上去了。然後他就被抓起來了,罪名是:嫖娼、襲警、強姦未遂。 路漫漫其修遠兮,吾將上下而求索
spring-boot-2.0.3不一樣系列之源碼篇 - 階段總結
led gpo otl 開始 ted source rand java類 nal 前言 開心一刻 朋友喜歡去×××,第一次推門進來的是一個學生美眉,感覺還不錯;後來經常去,有時是護士,有時是空姐,有時候是教師。昨天晚上推門進去的是一個女警察,長得賊好看,身材也很好
Spring Boot 2.0 讀書筆記_04:MVC 下
2. MVC 下 驗證框架 關於驗證框架,之前很少用到, 在前端傳遞的引數中,前端框架已經存在一些驗證策略。比如:型別監測、長度監測、日期正則判斷等。因此在後端Controller層中的校驗就很少用到。但實際情況也可能存在有些惡意程式碼繞過前端驗證,直接向後端傳送請求這樣的
spring-boot-2.0.3不一樣系列之番外篇
前言 還記得當初寫spring-session實現分散式叢集session的共享的時候,裡面有說到利用filter和HttpServletRequestWrapper可以定製自己的getSession方法,實現對session的控制,從而將session存放到統一的位置進行儲存,達到session共享的目
微服務 Spring Boot 2.0 + Spring cloud + consul + Hystrix + zuul + config + feign (四)
系列文章: 你知道雪崩效應嗎? 在微服務架構中,最可怕的就是這樣的情況: 當一個基礎的服務(A )出現了問題,比如資料庫 提供資料的服務(B)就不可用, 隨著時間的推移, 取票服務(C) 服務呼叫提供資料的服務(B)介面時,請求超時,C服務不可用 整個微服務系