SpringCloudConfig之client端报错Could not resolve placeholder问题

目录
  • 一、前言
  • 二、排查
  • 三、调试
  • 四、测试
  • 总结

一、前言

环境:jdk 1.8,SpringCloud Greenwich.SR2。

如题,springcloud config-client启动报错:Could not resolve placeholder 'from' in value "${from}",具体异常堆栈如下:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-10-02 11:33:10.394 ERROR 9204 --- [           main] o.s.boot.SpringApplication               : Application run failed
 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'scopedTarget.testController': 
    Injection of autowired dependencies failed; 
    nested exception is java.lang.IllegalArgumentException: 
    Could not resolve placeholder 'from' in value "${from}"
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:380) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
        ..
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'from' in value "${from}"
    ..

二、排查

很显然,无法成功启动SpringCloudConfig客户端的原因是不能从配置文件中解析并成功注入属性值${from}。

回头检查SpringCloudConfig服务端的配置和运行状况均正常无误,再查看上面异常之前的启动日志,也显示了可以成功连接到config-server,如下:

2019-10-02 11:33:06.919  INFO 9204 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:7001/
2019-10-02 11:33:08.789  INFO 9204 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=spring-cloud-config-client, profiles=[dev], label=master, version=516591f9604c28b12cd5a65f9fb89806f2f1c602, state=null
2019-10-02 11:33:08.789  INFO 9204 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}]}

所以只可能是config-client自身的问题,它的bootstrap.properties配置如下:

其中,testcloud为config-server中配置的Git仓库中存储的配置文件名中的${application}部分。

三、调试

config-client要从config-server通过http的方式获取到对应分支和对应环境的testcloud配置属性,即http://localhost:7001/testcloud/dev/master/,因此在ConfigServicePropertySourceLocator中,打断点看看具体是怎么获取的。

查看http请求参数args的值,期待参数/{name}/{profile}/{label}中的name=testcloud,而非spring.cloud.config.name的值spring-cloud-config-client,因此要么删掉属性spring.cloud.config.name,使第一个参数为spring.application.name=testcloud;要么将其直接设置为testcloud即可。

下面列出正确的配置:

#对应config-server中配置文件的{application}部分
spring.application.name=testcloud
server.port=7002

#注意此属性将覆盖spring.application.name,若不一致则会导致不能从config-server读取PropertySources
spring.cloud.config.name=testcloud
#对应config-server中配置文件的{profile}部分
spring.cloud.config.profile=dev
#对应config-server中配置文件的{label}部分
spring.cloud.config.label=master
#配置中心config-server的地址
spring.cloud.config.uri=http://localhost:7001/

四、测试

测试Controller类如下:

@RefreshScope
@RestController
public class TestController {
    @Value("${from}")
    private String from;
    @Autowired
    private Environment env;

    @RequestMapping("/from")
    public String fetchFromVal() {
        return from;
    }

    @RequestMapping("/from2")
    public String fetchFromVal2() {
        return env.getProperty("from", "undefined");
    }
}

浏览器或Postman或curl访问http://localhost:7002/from和http://localhost:7002/from2,均可成功获取到属性值,如下:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • spring cloud config 配置中心快速实现过程解析

    spring-cloud-config 配置中心实现 Spring Cloud Config 用于为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,分为server端和client端. server端为分布式配置中心,是一个独立的微服务应用:client端为分布式系统中的基础设置或微服务应用,通过指定配置中心来管理相关的配置. Spring Cloud Config 构建的配置中心,除了适用于 Spring 构建的应用外,也可以在任何其他语言构建的应用中使用. Spring Clou

  • springCloud config本地配置操作

    一般很多项目不是在springcloud的环境中使用的,但是需要用到分布式配置中心来管理一些外部或者项目的配置,这个时候我们可以使用springcloud-config的本地配置. 配置config-server服务端 使用start.spring.io创建一个springcloud工程,pom中引入: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-c

  • 引入SpringCloud-gateway报错的解决方案

    1.问题描述 在我引入SpringCloud-gateway,运行时报错如下: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'routeDefinitionRouteLocator' defined in class path resource [org/springframework/cloud/gateway/config/GatewayAuto

  • SpringCloudConfig之client端报错Could not resolve placeholder问题

    目录 一.前言 二.排查 三.调试 四.测试 总结 一.前言 环境:jdk 1.8,SpringCloud Greenwich.SR2. 如题,springcloud config-client启动报错:Could not resolve placeholder 'from' in value "${from}",具体异常堆栈如下: Error starting ApplicationContext. To display the conditions report re-run yo

  • Vue.js报错Failed to resolve filter问题的解决方法

    之前使用vue.js写分页功能时,写了一个过滤器,发现一个比较奇怪的错误. console控制台调试的时候,提示错误消息: Failed to resolve filter: HomePage console错误信息.jpg 我原来的写法: 原来的错误写法.jpg 错误原因: 经过自己的摸索,后来发现竟然是代码顺序错误问题. 由于先执行的pageList,后执行的Vue的过滤方法,最终调整过的写法: 修改后的正确写法.jpg 作者:=金刚= 文章地址:http://www.cnblogs.com

  • vue3+vite项目中按需引入vant报错:Failed to resolve import的解决方案

    目录 问题描述 原因分析 解决方案 总结 问题描述 近日尝试使用vite+vue3+vant开发项目过程中,参考vant官网开发指南->快速上手->引入组件 按照上述配置好后,运行vite环境报错:Failed to resolve import 原因分析 根据报错信息,发现是vant的样式引入路径不对. 程序解析为:项目路径/node_modules/vant/lib/vant/es/组件/style 实际应该是:项目路径/node_modules/vant/lib/ vant/es/组件/

  • angular报错can't resolve all parameters for []的解决

    目录 angular报错can't resolve all parameters for [] 报错如下 找个几种原因总结如下 angular4 Can't resolve all parameters 总结 angular报错can't resolve all parameters for [] 报错如下 此问题头痛了很久 找个几种原因总结如下 但这2种均不能解决我的问题,最后发现了另外一个原因,就是这个不能resolve的参数是一个HTTPService,这个服务在index.ts中expo

  • Can't use Subversion command line client:svn 报错处理

    需要主意的有两点: 1.安装svn的时候,第二项,command line client tools也要安装 2.点击报错的fix it 打开了settings,把红色框中的地址改为安装svn地址路径下的svn.exe Android Studio面板中的以下两个按钮分别是 svn的跟新 和 上传 通过此文,希望能帮助大家解决此问题!谢谢大家对本站的支持!

  • Can't use Subversion command line client:svn 报错处理

    需要主意的有两点: 1.安装svn的时候,第二项,command line client tools也要安装 2.点击报错的fix it 打开了settings,把红色框中的地址改为安装svn地址路径下的svn.exe Android Studio面板中的以下两个按钮分别是 svn的跟新 和 上传 通过此文,希望能帮助大家解决此问题!谢谢大家对本站的支持!

  • 解决nginx报错信息 client intended to send too large body: 1331696 bytes

    解决nginx报错信息 client intended to send too large body: 1331696 bytes 1,nginx后台error日志报错 2016/02/05 16:23:56 [error] 12024#0: *441106971 connect() failed (111: Connection refused) while connecting to upstream, client: 113.214.1.10, server: localhost, req

  • mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】

    本文实例分析了mysql存储emoji表情报错的处理方法.分享给大家供大家参考,具体如下: utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符.如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1

  • Python连接Oracle之环境配置、实例代码及报错解决方法详解

    Oracle Client 安装 1.环境 日期:2019年8月1日 公司已经安装好Oracle服务端 Windows版本:Windows10专业版 系统类型:64位操作系统,基于x64的处理器 Python版本:Python 3.6.4 :: Anaconda, Inc. 2.下载网址 https://www.oracle.com/database/technologies/instant-client/downloads.html 3.解压至目录 解压后(这里放D盘) 4.配置环境变量 控制

  • 解决Navicat Premium 连接 MySQL 8.0 报错"1251"的问题分析

    人闲太久,努力一下就以为是在拼命. 一.问题 Navicat Premium 连接 MySQL 8.0 报错: 1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client 二.原因 MySQL 8.0 改变了密码认证方式. 在 MySQL 8.0 之前版本的密码认证方式为: mysql_native_password 为了提供更安全的密码加密

随机推荐