首页 > 解决方案 > Spring Boot 环境属性返回 null

问题描述

我有一个 Spring Boot 2 应用程序。我正在尝试通过 spring Environment 以及 @Value 属性访问我的应用程序属性文件属性,它们都不起作用。

@Autowired
Environment env;

logger.info(env.getProperty("app.environment"));


@Value("${app.environment}")
private String _env;

logger.info(_env);

在此处输入图像描述

app.environment=本地

看起来 spring boot 根本没有检测到 application.properties 文件。

我在这里做错了什么,在此先感谢

标签: spring-boot

解决方案


如果注入的属性为 null,则很可能意味着您的 bean 尚未创建。Spring boot 仅在创建 bean 后才将值注入 bean 属性。

这是一个简单的实验来演示这种行为:

@Value("${spring.application.name}")
private String instanceApplicationName;

public UserController(@Value("${spring.application.name}") String appNameInConstructor)  {
    System.out.println("Constructor app name: " + appNameInConstructor);
    System.out.println("Instance application name: " + this.instanceApplicationName);
}

哪个属性将为空?instanceApplicationName 还是 appNameInConstructor?

是的,它是null的instanceApplicationName属性,因为首先调用构造函数并且尚未初始化实例属性。appNameInConstructor正确记录应用程序名称。

因此,您在哪里引用注入的属性以及如何注入它们,两者都很重要。

你可以在这里查看整个项目:https ://github.com/nkumashi/springboot-webmvc-demo 。


推荐阅读