如果我用JVM变量设置位置,如何将参数从* .properties设置为SPRING appContext.xml?

时间:2016-04-22 16:00:31

标签: java xml spring properties jvm

我有一个VM参数-Dapp.conf=/path/to/config.properties,我的Spring 4.2.5应用程序有一个appContext.xml。 此config.properties包含database.username=username

等属性

在XML配置中我有这个bean <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value= "${database.driver}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> </bean>

我正在尝试使用以下方法读取我的配置文件:

 `<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
    <property name="location" value="file:///#{systemEnvironment['app.conf']}"/>
</bean>`

但我插入的参数value= "${database.driver}没有从文件中读取。

我如何将我的参数从我的属性文件插入到我的数据源?

在这种情况下,它只是插入${database.driver},我有异常,该参数无效。

1 个答案:

答案 0 :(得分:0)

在Spring BOOT中,我已经做到了这一点并且有效:

        Properties properties = new Properties();
    try (Reader reader =
                 new FileReader(
                         System.getProperty("app.conf")
                       //this contains path:"D://config.properties"
                 )) {
        properties.load(reader);
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
    for (String propertyName: properties.stringPropertyNames()) {
        System.setProperty(propertyName, properties.getProperty(propertyName));
    }

此代码将我的属性加载为VM参数,我可以使用Spring注释@Value("#{property.name}")

访问它们

我不知道为什么,但System.setProperties(properties);没有用。