Get the values from the properties file at runtime based on the input - java Spring

不羁岁月 提交于 2019-12-07 05:21:46

问题


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?


回答1:


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 + "}");
    }
}



回答2:


The PropertySources 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, e.g.

<util:properties id="appProperties" location="classpath:app.properties" />

...

@Autowired 
@Qualifier("appProperties")
private Properties appProperties;

...

appProperties.getProperty(flower);



回答3:


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>


来源:https://stackoverflow.com/questions/21609271/get-the-values-from-the-properties-file-at-runtime-based-on-the-input-java-spr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!