首页 > 解决方案 > Spring Boot使用@Value for userName获取无效属性值

问题描述

为什么当我使用此代码时 Spring Boot 给我错误的属性值

@Component
public class MyComponent implements ApplicationListener<ContextRefreshedEvent> {

    @Value("${userName}")
    private String user;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        System.out.println("===================: "+user);
    }

}

应用程序属性

userName=admin

它不是在打印“管理员”,而是在打印我的 Windows 用户名。

标签: javaspringspring-boot

解决方案


来自Spring Boot 文档

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

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

[...]

10-操作系统环境变量

[...]

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

如您所见,您的操作系统环境变量优先于定义的变量,application.properties当您想要覆盖它们时非常有用。

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


推荐阅读