在SpringBoot项目读取yml配置文件中参数时,使用@Value("${friend.name}") 去读取配置中参数值。
配置如下:
friend:
name: zhangsan
age: 20
项目启动时报错:
java.lang.IllegalArgumentException: Could not resolve placeholder 'friend.name' in value "${friend.name}"
检查配置是否写错,k: v参数中是否带有空格,写法是正常的,又检查了启动类模块下中yml文件的参数是否可以正常读取,发现是可以正常读取到配置中的值。
原因
如果SpringBoot项目多个模块中都有application.yml文件,则会只读取有主启动类中的yml文件,不会读取其他模块中的配置文件,例如:在api模块中有一个application.yml文件,在core模块中有一个application.yml,如果启动core模块中的主启动类,则只会加载core模块中的application.yml文件,并不会加载api模块中的application.yml文件。
解决方案
1:修改其他模块中的yml文件的名字为application-xxx.yml
2:在主启动模块中的application.yml中配置如下内容
spring:
profiles:
active: xxx
这样项目就可以正常启动,并读取配置值了