@Value is always null

redboy picture redboy · Jun 10, 2015 · Viewed 7.7k times · Source

I have a situation where my attempt to use a @Value annotation results in the value being a null.

This is part of a large project and I'm not sure which parts of it are needed. I am using Java anotations (no xml file) and Spring boot.


@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
@ComponentScan
public class RESTApplication {
    public static void main(String[] args) {
        SpringApplication.run(RESTApplication.class, args);
    }
}

application.properties contains:

maxuploadfilesize=925000000

I did try to create a PropertySourcesPlaceholderConfigurer as some websites mentioned to do so.

@Configuration
public class AppConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

Here is the class attempting to use it:

@Component
public class MyClass {
    @Value("${maxuploadfilesize}")
    String maxFileUploadSize;

    public String getMaxFileUploadSize() {
        return maxFileUploadSize;
    }

    public void setMaxFileUploadSize(String maxFileUploadSize) {
        this.maxFileUploadSize = maxFileUploadSize;
    }
}

However at runtime, maxFileUploadSize is always null. Note the below debug comment where PropertySourcesPropertyResolver seemed to find its correct value within the application.properties file.

2015-06-10 13:50:20.906 DEBUG 21108 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Searching for key 'maxuploadfilesize' in [applicationConfig: [classpath:/application.properties]]
2015-06-10 13:50:20.906 DEBUG 21108 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'maxuploadfilesize' in [applicationConfig: [classpath:/application.properties]] with type [String] and value '925000000'

Answer

Hansjoerg Wingeier picture Hansjoerg Wingeier · Jun 11, 2015

It looks like MyClass was not processed as SpringBean, which would mean, that the @Value-annotation was not processed. You could check that with providing a default value, like @Value("${maxuploadfilesize:'100'}"). If the value is still null, then you know, that MyClass is not instantiated as a SpringBean.

Since it is annotated with @Component, you should be able to simply inject it with @Autowired private MyClass myclass;