Could not resolve placeholder error

springboot启动失败,报错“Could not resolve placeholder "xxx” in value "${zzz}"。这种问题一看就是加载不到变量zzz,需要查一下yml文件中是否配置了该变量。如果有,再去编译好的文件target/classes目录下的看看yml文件中是否配置了该变量。

我要说的是另外一种情况,由于引入了三方件,我需要在xml文件中使用该变量,按照三方件的guide正确配置了xml,但还是启动不起来,总是报上述错误。

首先第一步,要确认到底是变量读取不到,还是xml配置的不对,然后才能继续分析。

这时我们可以找到启动时加载property的类,在里面加上断点看看读取到的properties是否正确。

注:PropertySourceLoader接口是用来在项目启动的时候加载properties、xml、yml配置文件的,这个接口有两个实现类PropertiesPropertySourceLoader和YamlPropertySourceLoader,分别用来加载 properties文件和yml配置文件。

我的project配置的是yml,所以在YamlPropertySourceLoader.class中打上断点,就能知道当前读取的是哪个yml(对于多环境的yml配置),以及yml里的配置是否都已经加载成功。 

说个题外话,yml的加载顺序大家应该都很清楚,如果你同时配置了bootstrap.yml和application.yml,系统会先加载bootstrap.yml,然后才加载application.yml。两者的区别是bootstrap.yml一般配置一些系统级别的参数,application.yml一般配置的是应用级别的。如果使用spring cloud config,需要把config server url等信息配置到boostrap.yml中,而实现application.yml的动态替换。

下面是YamlPropertySourceLoader的源码:可以看到其中使用了org.yaml.snakeyaml来解析yml文件,这个三方件一般不需要单独在maven中引用,它已经集成到了spring boot framework中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值