Spring Boot: @Value returns always null

You can't use @Value on static variables. You'll have to either mark it as non static or have a look here at a way to inject values into static variables:

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

EDIT: Just in case the link breaks in the future. You can do this by making a non static setter for your static variable:

@Component
public class MyComponent {

    private static String directory;

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

The class needs to be a Spring bean though or else it won't be instantiated and the setter will be not be accessible by Spring.


Few things for you to cross check apart from @Plog's answer.

static variables can't be injected with value. Check @Plog's answer.

  • Make sure the class is annotated with @Component or @Service
  • The component scan should scan the enclosing package for registering the beans. Check your XML if xml enabled configuration.
  • Check if the property file's path is correct or in classpath.

For the ones still facing the issue after all the preceding suggestions, make sure you are not accessing that variable before the bean has been constructed.

That is:

Instead of doing this:

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

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

do this:

@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
   }
}

Hope this will help someone avoid wasting hours.