I have my colour.roperties file as
rose = red
lily = white
jasmine = pink
I need to get the value for colour as
String flower = runTimeFlower;
@Value("${flower}) String colour;
where flower value we will get at runtime. How can I do this in java Spring. I need to get a single value (from among 50 values defined in the properties file )at runtime based on the user input. If i cannot use @Value , Could you tell me other ways to handle this please?
There is no way to do what you are describing using @Value, but you can do this, which is the same thing pretty much:
package com.acme.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class Example {
private @Autowired Environment environment;
public String getFlowerColor(String runTimeFlower) {
return environment.resolvePlaceholders("${" + runTimeFlower + "}");
}
}
The PropertySource
s which Spring reads from won't know the value of the flower
variable, so @Value
won't work.
Inject a Properties
object or a Map
. Then just look up the colour using the property name or key, respectively, eg
<util:properties id="appProperties" location="classpath:app.properties" />
...
@Autowired
@Qualifier("appProperties")
private Properties appProperties;
...
appProperties.getProperty(flower);
What @ike_love says it correct, but why don't you just load the properties in memory on app start and then you can resolve your flower taking value from a map? In my mind you don't need to delegate every simple thing like this to Spring. Anyway I don't know your Spring config, but in order Spring to be able to load the properties you need to define a PropertyPlaceholderConfigurer to tell where are the property files:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:app.properties</value>
</list>
</property>
</bean>
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.