当我使用此代码时,为什么Spring Boot给我错误的属性值
@Component
public class MyComponent implements ApplicationListener<ContextRefreshedEvent> {
@Value("${userName}")
private String user;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("===================: "+user);
}
}
application.properties
userName=admin
它不是打印'admin',而是我的Windows用户名。
答案 0 :(得分:2)
Spring Boot使用一个非常特殊的PropertySource顺序,该顺序旨在允许明智地覆盖值。按以下顺序考虑属性:
1-主目录上的Devtools全局设置属性(在devtools处于活动状态时,〜/ .spring-boot-devtools.properties)。
[...]
10- OS环境变量。
[...]
14-打包的jar之外的应用程序属性( application.properties 和YAML变体)。
如您所见,您的OS env变量优先于application.properties
中定义的变量,这在您要覆盖它们时非常有用。
您应该考虑重命名变量,以使其与Windows的环境变量名称不冲突。