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?
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();
}
就我而言,不会注入静态字段。
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: Spring @Value annotation in @Controller class not evaluating to value inside properties file and Spring 3.0.5 doesn't evaluate @Value annotation from properties
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
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;
我正在使用 spring boot,对我来说将版本从1.4.0.RELEASE
升级到1.5.6.RELEASE
解决了这个问题。
In my case, I had the lombok @AllArgsConstructor and that picked up the property as well. Deleting this annotation solved the problem.
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
.
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
.
@Value sometimes can take a day or a half to get resolved ;).
Here is what I did :
Add property to properties or YAML file
Make Sure MAIN CLASS IS ANNOTATED WITH @EnableAutoConfiguration OR @SpringBootApplication
CREATE AppConfig IN WHICH YOU CAN USE @Value
@Value("${PROPERTY}") private String URL;
Annotate this AppConfig with @Configuration at class level
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.
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
For me it was due to resources folder not marked as "Resources Root" in Intellij IDEA. Just right-click on resources directory -> "Mark directory as" -> "Resources Root".
The reason why things were not working for me was because I had 2 instances of PropertyPlaceholderConfigurer beans set up (in a large set of spring configurations). And once one is setup the other is completely useless. It is probably a very obvious thing, but for me it was not. I do not understand why a second instance of a PropertyPlaceholderConfigurer does not throw an exception at the moment of creation (when there is already another instance). Instead of silently ignoring the second instance. Like this you could get a meaningful error.
Hope it is helpful for anyone out there:.)
For me it was because I had moved my project root folder. I don't know why, but removing all folders .settings
, .mvn
, target
, .project
and reimport project into eclipse worked for me.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.