本文為joshua317原創文章,轉載請注明:轉載自joshua317博客 https://www.joshua317.com/article/139
一、為啥要講這個版本對應
首先先說下我此次記錄問題的SpringBoot 版本:2.5.4
由於最近剛開始接觸SpringBoot,在加載Eureak的客戶端依賴包的時候,出現了下面的錯誤,提示找不到依賴
Cannot resolve org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:unknown
當時懷疑應該是SpringBoot 版本:2.5.4版本下面沒有這個jar包,於是先通過阿里雲的maven私服去查找了下,
然后嘗試去掉版本搜了下,大概有501個
於是找了一個相近的版本,使用的是2.2.6.RELEASE
,然后刷新maven加載
加載成功后,spring-cloud-starter-netflix-eureka-client
依賴包已經下載下來
於是乎,滿心歡喜的去運行應用,結果啪啪打臉啊,比任何時候都響,那是響徹天空,響徹萬里啊!!!
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:270) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:762) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:567) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:212) [spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:117) [spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:74) [spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) [spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) [spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) [spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) [spring-context-5.3.9.jar:5.3.9]
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63) [spring-boot-2.5.4.jar:2.5.4]
at java.util.ArrayList.forEach(ArrayList.java:1259) ~[na:1.8.0_281]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:374) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:332) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4]
at com.joshua317.blog.BlogApplication.main(BlogApplication.java:12) ~[classes/:na]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:232) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:210) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:149) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:294) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1098) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.3.9.jar:5.3.9]
... 30 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_281]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_281]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_281]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.9.jar:5.3.9]
... 37 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_281]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_281]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) ~[na:1.8.0_281]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_281]
... 41 common frames omitted
2021-09-16 10:58:56.852 ERROR 15524 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:270) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:762) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:567) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:212) ~[spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:117) ~[spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:74) ~[spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63) ~[spring-boot-2.5.4.jar:2.5.4]
at java.util.ArrayList.forEach(ArrayList.java:1259) ~[na:1.8.0_281]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62) ~[spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:374) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:332) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) [spring-boot-2.5.4.jar:2.5.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) [spring-boot-2.5.4.jar:2.5.4]
at com.joshua317.blog.BlogApplication.main(BlogApplication.java:12) [classes/:na]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:232) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:210) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:149) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:294) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1098) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.3.9.jar:5.3.9]
... 30 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_281]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_281]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_281]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.9.jar:5.3.9]
... 37 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_281]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_281]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) ~[na:1.8.0_281]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_281]
... 41 common frames omitted
Process finished with exit code 1
經過多方調研,考證,最終證實原來SpringBoot版本要想使用SpringCloud里面的依賴包,需要版本兼容才可以,至於如何考證,如何證實,期間走了多少彎路,這里就不贅述了,寶寶心里苦,但是寶寶不說。苦就苦我一人吧,以后大家遇到了知道怎么回事,避免踩這樣的坑就行了。希望初學者,也能注意此處的問題,在引入依賴包的時候,要找好對應的版本。如果項目在初始化時正確,然后編譯時報錯的,基本上都是依賴包導致的問題。
注意pom.xml里面是否有dependencyManagement版本管理的設置,因為這塊是會識別並加載所需要的依賴版本,比如我要加載spring-cloud-starter-netflix-eureka-client
,首先確定好你的SpringBoot版本是否兼容依賴的SpringCloud版本,其次是否設置了spring-cloud.version
,接着確認是否設置了dependencyManagement下面的spring-cloud-dependencies
依賴,最后確認好要加載的spring-cloud-starter-netflix-eureka-client
,這樣最終保證你所需要的依賴包能夠爭取無誤的加載下來。如下面的代碼示例:
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
</properties>
<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>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
一定要確保SpringBoot版本和Spring Cloud版本的兼容性
二、如何查看版本對應
2.1 查看Spring Cloud版本
首先進入srping官網,https://spring.io/,然后找到Spring Cloud頁面
根據官方說明我們可以知道,可以直接創建一個Spring Cloud 項目,也可以在Spring Boot應用的基礎上添加Spring Cloud
Getting Started
Generating A New Spring Cloud Project
The easiest way to get started is visit start.spring.io, select your Spring Boot version and the Spring Cloud projects you want to use. This will add the corresponding Spring Cloud BOM version to your Maven/Gradle file when you generate the project.
Adding Spring Cloud To An Existing Spring Boot Application
If you an existing Spring Boot app you want to add Spring Cloud to that app, the first step is to determine the version of Spring Cloud you should use. The version you use in your app will depend on the version of Spring Boot you are using.
The table below outlines which version of Spring Cloud maps to which version of Spring Boot.
入門
生成一個新的 Spring Cloud 項目
最簡單的入門方法是訪問start.spring.io,選擇您的 Spring Boot 版本和您要使用的 Spring Cloud 項目。這將在您生成項目時將相應的 Spring Cloud BOM 版本添加到您的 Maven/Gradle 文件中。
將 Spring Cloud 添加到現有的 Spring Boot 應用程序
如果您想要將 Spring Cloud 添加到該應用程序的現有 Spring Boot 應用程序,第一步是確定您應該使用的 Spring Cloud 版本。您在應用中使用的版本取決於您使用的 Spring Boot 版本。
下表概述了 Spring Cloud 的哪個版本映射到 Spring Boot 的哪個版本。
同時要注意,下面這些已達到生命周期終止狀態,不再受支持。
Spring Cloud Dalston, Edgware, Finchley, and Greenwich have all reached end of life status and are no longer supported.
Spring Cloud Dalston、Edgware、Finchley 和 Greenwich 都已達到生命周期終止狀態,不再受支持。
點擊最新版本https://spring.io/projects/spring-cloud#learn,我們可以看下對應的說明文檔:https://docs.spring.io/spring-cloud/docs/current/reference/html/
可以看到,Spring Cloud版本是2020.0.3
,是基於Supported Boot Version: 2.4.6
2.2 引入Spring Cloud版本
既然現在知道要使用哪個版本系列以及該版本系列的最新服務版本,我們可以將 Spring Cloud BOM 添加到應用程序中。修改pom.xml文件
<properties>
<spring.cloud-version>Hoxton.SR8</spring.cloud-version>
</properties>
<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>
注意:
發布系列包含 spring-cloud-dependencies和 spring-cloud-starter-parent. 我們可以像使用父對象一樣使用spring-boot-starter-parent(如果你使用的是 Maven)。如果只需要依賴管理,“依賴”版本是同一事物的僅 BOM 版本(它只包含依賴管理,沒有插件聲明或對 Spring 或 Spring Boot 的直接引用)。如果使用的是 Spring Boot 父 POM,那么可以使用 Spring Cloud 中的 BOM。反之:使用 Cloud parent 使得不可能或至少不可靠,也使用 Boot BOM 來更改 Spring Boot 及其依賴項的版本。
就像 Spring Boot 一樣,許多 Spring Cloud 項目都包含 starters,你可以將其添加為依賴項,以將各種雲原生功能添加到您的項目中。在許多情況下,許多功能純粹是通過將 starter 添加到類路徑來啟用的。起始名稱記錄在各個項目中。下面是一個示例,說明如何通過maven將 Spring Cloud Config Client 和 Spring Cloud Netflix Eureka 客戶端添加到您的應用程序中。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
...
</dependencies>
三、版本對應關系
官方的對應關系
版本關系對應地址:https://spring.io/projects/spring-cloud
Release Train | Boot Version |
---|---|
2020.0.x aka Ilford | 2.4.x, 2.5.x (Starting with 2020.0.3) |
Hoxton | 2.2.x, 2.3.x (Starting with SR5) |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
Spring Boot的版本以數字表示。例如:Spring Boot 2.3.12.RELEASE --> 主版本.次版本.增量版本(Bug修復) 下面是版本號介紹:
- Alpha:不建議使用,主要是以實現軟件功能為主,通常只在軟件開發者內部交流,Bug較多;
- Beta:該版本相對於α版已有了很大的改進,消除了嚴重的錯誤,但還是存在着一些缺陷,需要經過多次測試來進一步消除;
- GA:General Availability,正式版本,官方推薦使用此版本,在國外都是用GA來說明release版本;
- M:又叫里程碑版本,表示該版本較之前版本有功能上的重大更新;
- PRE(不建議使用):預覽版,內部測試版,主要是給開發人員和測試人員測試和找BUG用的;
- Release:最終版本,Release不會以單詞形式出現在軟件封面上,取而代之的是符號(R);
- RC:該版本已經相當成熟了,基本上不存在導致錯誤的BUG,與即將發行的正式版相差無幾;
- SNAPSHOT:快照版,可以穩定使用,且仍在繼續改進版本。
- SR.X 修正版,服務版本,當項目發布積累到一定程度,需要修復該版本中的某個錯誤后以此來命名,X表示數字。
四、舉例說明如何找對應的版本
1.springCloud官方
提供最准確的springCloud,springBoot版本對應關系
,
可通過如下網址查看:
https://start.spring.io/actuator/info
2.可以通過具體的Spring Cloud版本,然后看下該版本是基於哪個Srping Boot版本構建的
https://spring.io/projects/spring-cloud#learn
3.可以通過Spring Cloud發布的說明進行查看
地址為:https://github.com/spring-cloud/spring-cloud-release/wiki
4.在項目創建時,確定好自己要加載的依賴包
這種方式也是比較推薦的方式,在項目創建的時候,已經選好自己要加載的依賴包,避免不必要的麻煩。
創建項目的地址:https://start.spring.io/
五、實戰
比如我們在Spring Boot項目的基礎上,需要加載Spring Cloud里面的依賴包spring-cloud-starter-netflix-eureka-client
,我們需要注意以下幾個地方:
主要是pom.xml文件里面的這4個地方
(1)Spring Boot 版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
(2)Spring Cloud版本
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
</properties>
注意:當然Spring Boot 版本和Spring Cloud的版本的兼容選擇,依然要參考上面提到的方法
(3)dependencyManagement設置,這個地方很重要哦!
<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>
(4)Spring Cloud的包加載,比如spring-cloud-starter-netflix-eureka-client
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
六、附錄
這個主要在解決問題的過程中,搜集到的一些對應關系,附在后面,供大家參考
序號 | 版本對應 |
---|---|
1 | <spring-boot.version>2.4.2</spring-boot.version> <spring-cloud.version>2020.0.0</spring-cloud.version> |
2 | <spring-boot.version>2.4.1</spring-boot.version> <spring-cloud.version>2020.0.0-M6</spring-cloud.version> |
3 | <spring-boot.version>2.4.0</spring-boot.version> <spring-cloud.version>2020.0.0-M6</spring-cloud.version> |
4 | <spring-boot.version>2.3.2.RELEASE</spring-boot.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> |
spring-cloud依賴 | spring-boot依賴 |
---|---|
Finchley.M2 | >=2.0.0.M3 and <2.0.0.M5 |
Finchley.M3 | >=2.0.0.M5 and <=2.0.0.M5 |
Finchley.M4 | >=2.0.0.M6 and <=2.0.0.M6 |
Finchley.M5 | >=2.0.0.M7 and <=2.0.0.M7 |
Finchley.M6 | >=2.0.0.RC1 and <=2.0.0.RC1 |
Finchley.M7 | >=2.0.0.RC2 and <=2.0.0.RC2 |
Finchley.M9 | >=2.0.0.RELEASE and <=2.0.0.RELEASE |
Finchley.RC1 | >=2.0.1.RELEASE and <2.0.2.RELEASE |
Finchley.RC2 | >=2.0.2.RELEASE and <2.0.3.RELEASE |
Finchley.BUILD-SNAPSHOT | >=2.0.999.BUILD-SNAPSHOT and <2.1.0.M3 |
Greenwich.M1 | >=2.1.0.M3 and <2.1.0.RELEASE |
Greenwich.SR6 | >=2.1.0.RELEASE and <2.1.999.BUILD-SNAPSHOT |
Greenwich.BUILD-SNAPSHOT | >=2.1.999.BUILD-SNAPSHOT and <2.2.0.M4 |
Hoxton.SR9 | >=2.2.0.M4 and <2.3.7.BUILD-SNAPSHOT |
Hoxton.BUILD-SNAPSHOT | >=2.3.7.BUILD-SNAPSHOT and <2.4.0.M1 |
2020.0.0-M3 | >=2.4.0.M1 and <=2.4.0.M1 |
2020.0.0-M4 | >=2.4.0.M2 and <=2.4.0-M3 |
2020.0.0-M5 | >=2.4.0.M4 and <2.4.1-SNAPSHOT |
2020.0.0-SNAPSHOT | >=2.4.1-SNAPSHOT |
spring-cloud-alibaba依賴 | spring-boot依賴 |
---|---|
2.2.1.RELEASE | >=2.2.0.RELEASE and <2.3.0.M1 |
Spring Cloud | Spring Boot |
---|---|
Angel版本 | 兼容Spring Boot 1.2.x |
Brixton版本 | 兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x |
Camden版本 | 兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x |
Dalston版本、Edgware版本 | 兼容Spring Boot 1.5.x,不兼容Spring Boot 2.0.x |
Finchley版本 | 兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x |
Greenwich版本 | 兼容Spring Boot 2.1.x |
Hoxtonl版本 | 兼容Spring Boot 2.2.x |
Spring Boot | Spring Cloud |
---|---|
1.5.2.RELEASE | Dalston.RC1 |
1.5.9.RELEASE | Edgware.RELEASE |
2.0.2.RELEASE | Finchley.BUILD-SNAPSHOT |
2.0.3.RELEASE | Finchley.RELEASE |
2.1.0.RELEASE-2.1.14.RELEASE | Greenwich.SR5 |
2.2.0.M4 | Hoxton.SR4 |
本文為joshua317原創文章,轉載請注明:轉載自joshua317博客 https://www.joshua317.com/article/139