Spring Boot使用userName的@Value获取无效的属性值

时间:2019-02-15 10:59:03

标签: java spring spring-boot

当我使用此代码时,为什么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用户名。

1 个答案:

答案 0 :(得分:2)

来自Spring boot documentation

Spring Boot使用一个非常特殊的PropertySource顺序,该顺序旨在允许明智地覆盖值。按以下顺序考虑属性:

1-主目录上的Devtools全局设置属性(在devtools处于活动状态时,〜/ .spring-boot-devtools.properties)。

[...]

10- OS环境变量

[...]

14-打包的jar之外的应用程序属性( application.properties 和YAML变体)。

如您所见,您的OS env变量优先于application.properties中定义的变量,这在您要覆盖它们时非常有用。

您应该考虑重命名变量,以使其与Windows的环境变量名称不冲突。