Spring Boot:@Value 总是返回 null

新手上路,请多包涵

我想使用 application.properties 文件中的一个值,以便将它传递到另一个类的方法中。问题是该值始终返回 NULL 。可能是什么问题呢?提前致谢。

application.properties

 filesystem.directory=temp

FileSystem.java

 @Value("${filesystem.directory}")
private static String directory;

原文由 Jonathan Williams 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 787
2 个回答

您不能在静态变量上使用 @Value。您必须将其标记为非静态或在此处查看将值注入静态变量的方法:

https://www.mkyong.com/spring/spring-inject-a-value-into-static-variables/

编辑:以防万一将来链接断开。您可以通过为静态变量创建一个非静态设置器来做到这一点:

 @Component
public class MyComponent {

    private static String directory;

    @Value("${filesystem.directory}")
    public void setDirectory(String value) {
        this.directory = value;
    }
}

该类需要是一个 Spring bean,否则它不会被实例化,并且 setter 将无法被 Spring 访问。

原文由 Plog 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于在所有上述建议之后仍然面临问题的人,请确保在构建 bean 之前没有访问该变量。

那是:

而不是这样做:

 @Component
public MyBean {
   @Value("${properties.my-var}")
   private String myVar;

   private String anotherVar = foo(myVar); // <-- myVar here is still null!!!
}

做这个:

 @Component
public MyBean {
   @Value("${properties.my-var}")
   private String myVar;

   private String anotherVar;

   @PostConstruct
   public void postConstruct(){

      anotherVar = foo(myVar); // <-- using myVar after the bean construction
   }
}

希望这会帮助别人避免浪费时间。

原文由 Philippe Simo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题