Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'webname' in value "${w

报错信息:Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'webname' in value "${webname}"

正常的配置,使用config client去访问server,启动client的时候,却出现无法解析变量。

springboot启动的时候,会去application.yml文件

网上看了很多解决方法都不行。比如

这个是在启动的时候,重新对PropertySourcesPlaceholderConfiturer进行注入,设置忽略无法解析文件位置。 

又找到一个解决方法,试了下,把application.yml重命名为bootstrap.yml就可以了。

springboot启动的时候才从配置文件中读取配置属性,配置文件在远程配置中心的话,注册中心的信息需要放在bootstrap.properties才能启动优先读取,放在application.properties会报错

 

Java 应用程序中,特别是在使用 Spring 框架时,`IllegalArgumentException: Could not resolve placeholder` 是一种常见的配置错误,通常发生在 Spring 试图解析 `application.properties` 或 `application.yml` 文件中的占位符 `${...}` 时,但找不到对应的属性值。 ### 异常示例 ``` java.lang.IllegalArgumentException: Could not resolve placeholder 'isUseUKey' in value "${isUseUKey}" ``` 这表明 Spring 在解析 `${isUseUKey}` 时无法找到名为 `isUseUKey` 的属性。 ### 常见原因与解决方法 #### 1. 属性未在配置文件中定义 确保在 `application.properties` 或 `application.yml` 中定义了 `isUseUKey` 属性。 **application.properties** ```properties isUseUKey=true ``` **application.yml** ```yaml isUseUKey: true ``` 如果使用了特定的配置文件(如 `application-dev.properties`),请确认是否在正确的配置文件中设置了该属性,并确保在启动时指定了正确的 `spring.profiles.active` 参数。 #### 2. 配置文件未被正确加载 检查是否配置了 `@PropertySource` 注解来加载自定义的 `.properties` 文件,例如: ```java @Configuration @PropertySource("classpath:custom.properties") public class AppConfig { } ``` 如果使用了该注解,请确认 `custom.properties` 文件中确实包含 `isUseUKey` 属性,并且文件位于 `src/main/resources` 目录下。 #### 3. 占位符拼写错误或命名不一致 属性名对大小写和拼写敏感,确保占位符名称与配置文件中的一致。 例如: ```properties isuseukey=true # 错误拼写 ``` ```java @Value("${isUseUKey}") // 正确拼写 private boolean isUseUKey; ``` 这种情况下,Spring 会抛出 `IllegalArgumentException`,因为 `isuseukey` 与 `isUseUKey` 不匹配。 #### 4. 多配置文件命名不一致 如引用中提到的,有时使用了多个环境配置文件(如 `product-cloud-dev.properties`、`product-cloud-prod.properties`),但属性命名格式不一致,例如前缀使用 `-`,而某些文件中使用 `.`,这会导致属性未被正确识别 [^3]。 确保所有配置文件中的命名格式一致,例如: ```properties # product-cloud-prod.properties chaunve.sk.exclude.value=example spring.datasource.url=jdbc:mysql://localhost:3306/mydb isUseUKey=true ``` #### 5. 使用默认值避免异常 可以在 `@Value` 注解中为占位符提供默认值,以防止未找到属性时抛出异常: ```java @Value("${isUseUKey:false}") private boolean isUseUKey; ``` 上述代码中,如果找不到 `isUseUKey` 属性,则使用默认值 `false`。 #### 6. 检查 PropertyPlaceholderConfigurer 配置 如果使用 XML 配置方式,确保正确配置了 `PropertyPlaceholderConfigurer`: ```xml <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:application.properties</value> </list> </property> </bean> ``` 确保配置文件路径正确,并且包含所需的属性。 ### 总结 `IllegalArgumentException: Could not resolve placeholder` 通常是由于属性未定义、拼写错误、配置文件未加载或命名不一致导致的。通过检查配置文件内容、路径、拼写一致性以及使用默认值,可以有效解决此类问题。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值