如何从bean的方法访问Spring托管属性?

时间:2011-03-04 18:23:54

标签: java spring

我有.properties文件中的属性列表。 现在我正在使用PropertyPlaceholderConfigurer管理这些属性文件。

我想从其中一个方法访问属性值。 任何人都可以建议如何实现这一目标吗?

例如

connection.properties
dev.url = "http://localhost:8080/"
uat.url = "http://xyz.com"

现在我通过指定connection.properties

配置了`PropertyPlaceholderConfigurer bean

我有一种方法可以根据部署模式读取网址 所以基于部署模式,我想使用属性文件更改URL。

如果这是正确的方法,请告诉我。

如果您有任何建议,请给予。

3 个答案:

答案 0 :(得分:3)

PropertyPlaceholderConfigurer does not expose其属性。但是,您可以使用例如,重新读取属性文件。 PropertiesLoadUtils

PropertiesLoaderUtils.loadProperties(
        new ClassPathResource("/connection.properties"));

答案 1 :(得分:2)

也许您正在寻找类似@Value注释的内容?

private @Value("#{connection.dev.url}") String myURL;

答案 2 :(得分:0)

不清楚你在寻找什么,但我有实用程序,它根据运行环境(dev,prod)加载属性

public class EnvironmentalPlaceHolderConfigurer extends PropertyPlaceholderConfigurer
        implements InitializingBean {

    private Resource overrideLocation;

    public void setOverrideLocation(Resource overrideLocation) {
        this.overrideLocation = overrideLocation;
    }
    if(overrideLocation != null){
            if( overrideLocation.exists())
                super.setLocation(overrideLocation);
            else{
                logger.warn("Unbale to find "+overrideLocation.getFilename() +" using default");
            }
        }else{
            logger.warn("Override location not set, using default settings");
        }
    }


    @Override
    public void afterPropertiesSet() throws Exception {
        setProperLocation();
    }

然后你需要将bean定义为

<bean class="com.commons.config.EnvironmentalPlaceHolderConfigurer">
    <property name="overrideLocation" value="classpath:/jms/${ENV_NAME}-jms.properties" />
    <property name="location" value="classpath:/jms/jms.properties" />
</bean>

您需要在计算机上定义一个环境条目,其密钥为“ENV_NAME”

例如:ENV_NAME = prod

对于windows环境变量以及.profile中的unix条目。

您需要以下列方式维护每个环境的属性 prod-jms.properties uat-jms.properties