Spring @Value is not resolving to value from property file

JavaSpringSpring Properties

Java Problem Overview


I've had this working in some other project before, I am just re-doing the same thing but for some reason it's not working. The Spring @Value is not reading from property file, but instead it's taking the value literally

AppConfig.java

@Component
public class AppConfig
{
    @Value("${key.value1}")
    private String value;
    
    public String getValue()
    {
        return value;
    }
}

applicationContext.xml:

<context:component-scan
	base-package="com.test.config" />
<context:annotation-config />

<bean id="appConfigProperties"
	class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="classpath:appconfig.properties" />
</bean>

appconfig.properties

key.value1=test value 1

In my controller, where I have:

@Autowired
private AppConfig appConfig;

The application starts just fine, but when I do

appConfig.getValue()

it returns

${key.value1}

It doesn't resolve to the value inside the properties file.

Thoughts?

Java Solutions


Solution 1 - Java

I also found the reason @value was not working is, @value requires PropertySourcesPlaceholderConfigurer instead of a PropertyPlaceholderConfigurer. i did the same changes and it worked for me, i am using spring 4.0.3 release. I configured this using below code in my configuration file -

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

Solution 2 - Java

In my case, static fields will not be injected.

Solution 3 - Java

Problem is due to problem in my applicationContext.xml vs spring-servlet.xml - it was scoping issue between the beans.

pedjaradenkovic kindly pointed me to an existing resource: https://stackoverflow.com/questions/11890544/spring-value-annotation-in-controller-class-not-evaluating-to-value-inside-pro and https://stackoverflow.com/questions/5275724/spring-3-0-5-doesnt-evaluate-value-annotation-from-properties

Solution 4 - Java

In my case I was missing the curly braces. I had @Value("foo.bar") String value instead of the correct form @Value("${foo.bar}") String value

Solution 5 - Java

for Sprig-boot User both PropertyPlaceholderConfigurer and the new PropertySourcesPlaceholderConfigurer added in Spring 3.1. so it's straightforward to access properties file. just inject

Note: Make sure your property must not be Static

@Value("${key.value1}")
private String value;

Solution 6 - Java

I was using spring boot, and for me upgrading the version from 1.4.0.RELEASE to 1.5.6.RELEASE solved this issue.

Solution 7 - Java

In my case, I had the lombok @AllArgsConstructor and that picked up the property as well. Deleting this annotation solved the problem.

Solution 8 - Java

Have a read of pedjaradenkovic's comment.

Further to the link he provides, the reason this isn't working is that @Value processing requires a PropertySourcesPlaceholderConfigurer instead of a PropertyPlaceholderConfigurer.

Solution 9 - Java

@Value sometimes can take a day or a half to get resolved ;).

Here is what I did :

  1. Add property to properties or YAML file

  2. Make Sure MAIN CLASS IS ANNOTATED WITH @EnableAutoConfiguration OR @SpringBootApplication

  3. CREATE AppConfig IN WHICH YOU CAN USE @Value

    @Value("${PROPERTY}") private String URL;

Annotate this AppConfig with @Configuration at class level

  1. SO FAR SETUP IS DONE NOW USE IT WHEREVER YOU WANT BY AUTOWIRING AppConfig

EXAMPLE: IN SOME SERVICE @Autowired private AppConfig appConfig; AND IN THE METHOD OF THIS SERVICE call appConfig.getUrl() to get the value of property URL from a properties file.

NOTE: DON'T TRY TO GET VALUE IN CONSTRUCTOR OF SERVICE IT WILL BE NULL.

Solution 10 - Java

Please note that if you have multiple application.properties files throughout your codebase, then try adding your value to the parent project's property file.

You can check your project's pom.xml file to identify what the parent project of your current project is.

Alternatively, try using environment.getProperty() instead of @Value.

Solution 11 - Java

Mine was casued by importing a wrong dependency. I had it imported from lombok by accident instead of "import org.springframework.beans.factory.annotation.Value;" Changing it back solved the problem

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTS-View Question on Stackoverflow
Solution 1 - JavaSachchidanand SinghView Answer on Stackoverflow
Solution 2 - JavaUser007View Answer on Stackoverflow
Solution 3 - JavaTS-View Answer on Stackoverflow
Solution 4 - JavaNaruto SempaiView Answer on Stackoverflow
Solution 5 - JavaDapper DanView Answer on Stackoverflow
Solution 6 - JavacraastadView Answer on Stackoverflow
Solution 7 - JavaAhmed AzizView Answer on Stackoverflow
Solution 8 - JavaMuelView Answer on Stackoverflow
Solution 9 - JavaShirish SinghView Answer on Stackoverflow
Solution 10 - JavaJanac MeenaView Answer on Stackoverflow
Solution 11 - JavaemilyView Answer on Stackoverflow