今天在学习 Spring Cloud 的 Ribbon 的时候,搭建的 Eureka client 启动失败,错误堆栈信息如下:
2021-03-09 12:58:42.826 ERROR 8032 --- [ restartedMain] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration': Unsatisfied dependency expressed through field 'eurekaServerConfig'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eurekaServerConfig' defined in class path resource [org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration$EurekaServerConfigBeanConfiguration.class]: Unsatisfied dependency expressed through method 'eurekaServerConfig' parameter 0; nested exception is org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'eurekaClientConfigBean': Could not bind properties to 'EurekaClientConfigBean' : prefix=eureka.client, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'eureka.client.service-url' to java.util.Map<java.lang.String, java.lang.String> 2021-03-09 12:58:42.874 INFO 8032 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2021-03-09 12:58:42.886 WARN 8032 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat 2021-03-09 12:58:42.917 INFO 8032 --- [ restartedMain] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-03-09 12:58:42.945 ERROR 8032 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Failed to bind properties under 'eureka.client.service-url' to java.util.Map<java.lang.String, java.lang.String>: Reason: No converter found capable of converting from type [java.lang.String] to type [java.util.Map<java.lang.String, java.lang.String>] Action: Update your application's configuration Process finished with exit code 0
我的配置文件如下:
eureka: instance: hostname: localhost client: # 不向注册中心注册自己 register-with-eureka: false # 取消检索服务 fetch-registry: false # 启动独立模式的Eureka server # 关闭客户端行为,这样它就不会不断尝试并无法到达它的对等端 # defaultZone 默认使用 http://localhost:8761/eureka/ 地址 # 使 serviceUrl 指向与本地实例相同的主机 service-url: http://${eureka.instance.hostname}:${server.port}/eureka/ server: # 开启注册中心的保护机制,默认是开启 enable-self-preservation: true # 设置保护机制的阈值,默认是0.85 renewal-percent-threshold: 0.5
仔细查看配置发现,是因为 service-url 配置存在问题,应该在 service-url 下面创建一个 defaultZone 项。修改后的配置:
eureka: instance: hostname: localhost client: # 不向注册中心注册自己 register-with-eureka: false # 取消检索服务 fetch-registry: false # 启动独立模式的Eureka server # 关闭客户端行为,这样它就不会不断尝试并无法到达它的对等端 # defaultZone 默认使用 http://localhost:8761/eureka/ 地址 # 使 serviceUrl 指向与本地实例相同的主机 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ server: # 开启注册中心的保护机制,默认是开启 enable-self-preservation: true # 设置保护机制的阈值,默认是0.85 renewal-percent-threshold: 0.5