spring boot 提示 could not resolve placeholder in string value

1.问题描述

 

spring boot在实体类中引用yml中的配置

    @Value("${shiro.session.expireTime}")
    private final int expireTime = 30;

一启动项目,就报错,提示could not resolve placeholder in string value,该错误基本上就是【找不到配置文件引起的(application.yml)】

 

2.解决方法

 

检查下target/classes目录下是否存在application.yml配置文件

如果存在,可在配置类上添加PropertySource主键根据错误日志判断是否存在application.yml配置文件。

@Configuration
@PropertySource("classpath:application.yml")
public class ShiroConfig {

 

### YML配置中占位符无法解析的原因分析 当遇到`could not resolve placeholder 'xxx'`错误时,通常意味着Spring Boot应用尝试访问YAML文件中的属性值却未能找到对应的键。这可能是由于多种原因造成的。 #### 错误可能源于以下几个方面: - **拼写错误**:检查`${}`内的字符串是否与YAML文件中的定义完全一致[^3]。 - **路径问题**:确认应用程序确实能够定位到指定的YAML文件,并且该文件位于classpath下正确的位置。 - **多环境配置冲突**:如果项目中有多个不同环境下的YAML文件(如application-dev.yml, application-prod.yml),需确保启动参数指定了正确的profile,以便加载相应的配置文件[^1]。 - **数据类型不匹配**:特别是对于复杂的数据结构比如列表或映射表,使用`@Value`注解可能会导致解析失败;此时建议改用`@ConfigurationProperties`来替代它[^2]。 ### 解决方案实例展示 针对上述提到的情况,下面给出具体的解决方案代码片段供参考: ```java // 方案一:采用@ConfigurationProperties绑定对象属性 @ConfigurationProperties(prefix = "remark") public class RemarkConfig { private List<String> bizTypes; // getter and setter methods... } ``` 通过这种方式可以更方便地管理复杂的配置项集合而无需逐个声明`@Value`变量。另外需要注意的是,在引入此特性之前要记得添加必要的依赖支持并启用相应功能。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> ``` 同时还需要在主程序入口处加上@EnableConfigurationProperties(RemarkConfig.class),从而激活自定义配置类的功能。 最后提醒一点就是关于IDE调试技巧的应用——可以在`YamlPropertySourceLoader.class`设置断点跟踪整个过程,以此验证哪些资源被实际加载以及它们的内容是什么样的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值