作为一个spring cloud初学者,很容易在spring cloud config遇到的坑,还原下操作。因为习惯,在写demo时会在start.spring.io中去生成config服务端和客户端的代码,如下所示,目前默认选中的Springboot版本为2.4.5

根据网络上的教程添加相应的配置:

1)服务端

spring:
  application:
    name: config-singe-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xxx/config-repo.git
          username: username
          password: password
          default-label: master
          search-paths: config
          force-pull: true

2) 客户端

spring:
  application:
    name: config-singe-client
  cloud:
     config:
       uri: http://localhost:8080
       label: master
       profile: dev

服务运行后,测试配置中心是否正常

配置已正确读取到,说明配置中心启动正常。

接下来启动客户端进行验证,直接启动报错,如下所示:

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\SoftSpace\IntelliJ IDEA 2020.1.4\lib\idea_rt.jar=51631:D:\SoftSpace\IntelliJ IDEA 2020.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\IdeaWorkSpace\config-singe-client\target\classes;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.4.5\spring-boot-starter-web-2.4.5.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-starter\2.4.5\spring-boot-starter-2.4.5.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot\2.4.5\spring-boot-2.4.5.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.4.5\spring-boot-autoconfigure-2.4.5.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.4.5\spring-boot-starter-logging-2.4.5.jar;C:\Users\86185\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\86185\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\86185\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;C:\Users\86185\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;C:\Users\86185\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\86185\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\86185\.m2\repository\org\yaml\snakeyaml\1.27\snakeyaml-1.27.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.4.5\spring-boot-starter-json-2.4.5.jar;C:\Users\86185\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.4\jackson-datatype-jdk8-2.11.4.jar;C:\Users\86185\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.4\jackson-datatype-jsr310-2.11.4.jar;C:\Users\86185\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.4\jackson-module-parameter-names-2.11.4.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.4.5\spring-boot-starter-tomcat-2.4.5.jar;C:\Users\86185\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.45\tomcat-embed-core-9.0.45.jar;C:\Users\86185\.m2\repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;C:\Users\86185\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.45\tomcat-embed-websocket-9.0.45.jar;C:\Users\86185\.m2\repository\org\springframework\spring-web\5.3.6\spring-web-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\spring-beans\5.3.6\spring-beans-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\spring-webmvc\5.3.6\spring-webmvc-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\spring-aop\5.3.6\spring-aop-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\spring-context\5.3.6\spring-context-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\spring-expression\5.3.6\spring-expression-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\3.0.3\spring-cloud-starter-config-3.0.3.jar;C:\Users\86185\.m2\repository\org\springframework\cloud\spring-cloud-starter\3.0.2\spring-cloud-starter-3.0.2.jar;C:\Users\86185\.m2\repository\org\springframework\cloud\spring-cloud-context\3.0.2\spring-cloud-context-3.0.2.jar;C:\Users\86185\.m2\repository\org\springframework\security\spring-security-crypto\5.4.6\spring-security-crypto-5.4.6.jar;C:\Users\86185\.m2\repository\org\springframework\cloud\spring-cloud-commons\3.0.2\spring-cloud-commons-3.0.2.jar;C:\Users\86185\.m2\repository\org\springframework\security\spring-security-rsa\1.0.9.RELEASE\spring-security-rsa-1.0.9.RELEASE.jar;C:\Users\86185\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.64\bcpkix-jdk15on-1.64.jar;C:\Users\86185\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.64\bcprov-jdk15on-1.64.jar;C:\Users\86185\.m2\repository\org\springframework\cloud\spring-cloud-config-client\3.0.3\spring-cloud-config-client-3.0.3.jar;C:\Users\86185\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.4\jackson-annotations-2.11.4.jar;C:\Users\86185\.m2\repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;C:\Users\86185\.m2\repository\org\apache\httpcomponents\httpcore\4.4.14\httpcore-4.4.14.jar;C:\Users\86185\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\86185\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.11.4\jackson-databind-2.11.4.jar;C:\Users\86185\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.11.4\jackson-core-2.11.4.jar;C:\Users\86185\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\86185\.m2\repository\org\springframework\spring-core\5.3.6\spring-core-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\spring-jcl\5.3.6\spring-jcl-5.3.6.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.4.5\spring-boot-starter-actuator-2.4.5.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.4.5\spring-boot-actuator-autoconfigure-2.4.5.jar;C:\Users\86185\.m2\repository\org\springframework\boot\spring-boot-actuator\2.4.5\spring-boot-actuator-2.4.5.jar;C:\Users\86185\.m2\repository\io\micrometer\micrometer-core\1.6.6\micrometer-core-1.6.6.jar;C:\Users\86185\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\86185\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\86185\.m2\repository\org\projectlombok\lombok\1.18.2\lombok-1.18.2.jar" com.spring.config.configsingeclient.ConfigSingeClientApplication
10:04:40.868 [main] DEBUG org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - Application failed to start due to an exception
org.springframework.cloud.config.client.ConfigServerConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set
	at org.springframework.cloud.config.client.ConfigServerConfigDataMissingEnvironmentPostProcessor.postProcessEnvironment(ConfigServerConfigDataMissingEnvironmentPostProcessor.java:60)
	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:100)
	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:86)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82)
	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63)
	at java.util.ArrayList.forEach(ArrayList.java:1257)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:375)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:333)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329)
	at com.spring.config.configsingeclient.ConfigSingeClientApplication.main(ConfigSingeClientApplication.java:10)
10:04:40.871 [main] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - 

***************************
APPLICATION FAILED TO START
***************************

Description:

No spring.config.import property has been defined

Action:

Add a spring.config.import=configserver: property to your configuration.
	If configuration is not required add spring.config.import=optional:configserver: instead.
	To disable this check, set spring.cloud.config.enabled=false or 
	spring.cloud.config.import-check.enabled=false.


Process finished with exit code 1

起初怀疑是否label或者config.name写错了,各种尝试,接下来怀疑是否配置文件写错了,又是各种尝试,2000 YEARS LATER...会不会版本有问题?查看自动生成的pom.xml的Spring Cloud版本如下:

开始各种百度,A FEW MOMENT LATER... 终于通过2020.0.2的“bootstrap.yml配置不生效”关键字找到了如下博客:

https://blog.csdn.net/kenkao/article/details/114987863

原来是2020.X.X版本官方重构了bootstrap引导配置的加载方式,需要添加以下依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

重新运行,客户端启动正常,且配置验证正常。

为更加深入了解Spring Boot与Spring Cloud的版本对应关系,百度相关资料,总结如下:

  1. Spring Cloud的版本号采用了伦敦地铁站的名称,同时根据字母表顺序来对应版本的时间顺序,比如:Brixton,Camden,Dalston,Edgware,Finchley,目前最新为Hoxton.SR11。
  2. 2020年4月份开始迭代2020.X.X版本,在该版本对bootstrap引导配置的加载方式进行了重构。
  3. Spring Cloud的每个版本对应依赖SpringBoot的版本不同,若依赖错误可能产生未知的错误。
  4. 初学一项新的框架时要优先了解版本依赖关系及考虑可能由于版本的原因产生的问题。

以下为SpringBoot和SpringCloud的版本对应关系

 

英文 中文 终结版本 SpringBoot版本
Angel 安吉尔 SR6 1.2.X
Brixton 布里克斯顿 SR7 1.3.X
Camden 卡梅登 SR7 1.4.X
Dalston 达斯顿 SR5 1.5.X
Edgware 艾奇韦尔 SR5 1.5.X
Finchley 芬奇利 SR2 2.0.X
Greenwich 格林威治 RC2 2.2.X
Hoxton 霍克斯顿 - 2.2.X  2.3.X
2020.0.2     2.4.X
2020.0.3-SNAPSHOT     2.5.0-SNAPSHOT 2.5.0-RC1

 

 

 

 

 

 

 

 

 

 

 

官网版本对应查询地址:

https://start.spring.io/actuator/info     

https://github.com/spring-cloud/spring-cloud-release/release       

https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-Hoxton-Release-Notes

 参考资料:

https://www.cnblogs.com/linliquan/p/12886328.html

https://blog.csdn.net/kenkao/article/details/114987863

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐