ApplicationContext.xml不会在目标位置更新环境变量

时间:2019-02-07 06:36:26

标签: spring hibernate datasource applicationcontext

这是我的ApplicationContext.xml代码

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
                <property name="driverClassName" value="${database.driverClassName}" />
                <property name="url" value="${database.url}" />
                <property name="username" value="${database.username}" />
                <property name="password" value="${database.password}" />
                <property name="testOnBorrow" value="true" />
                <property name="testOnReturn" value="true" />
                <property name="testWhileIdle" value="true" />
                <property name="timeBetweenEvictionRunsMillis" value="1800000" />
                <property name="numTestsPerEvictionRun" value="3" />
                <property name="minEvictableIdleTimeMillis" value="1800000" />
            </bean>

我的属性在名为 database.properties

的文件中定义

我需要在父pom.xml 中进行哪些更改,以在目标运行时 转换环境变量

您能帮忙还是给我一个适当的建议或链接,它可以使我在运行时获得数据库属性的名称。 例如 database.driverName应该更新为jdbcDriver

2 个答案:

答案 0 :(得分:1)

@Component
public class PropertyReloader {

    @Autowired
    private StandardEnvironment env;

    @Scheduled(fixedRate=5000)
    public void reloadProperties() throws IOException {
        MutablePropertySources ps = env.getPropertySources();
        Properties pr = new Properties();
        InputStream inputStream = getClass().getResourceAsStream("/ApplicationContext.xml");
        pr.load(inputStream);
        inputStream.close();
        pr.replace("class path resource [ApplicationContext.xml]", new PropertiesPropertySource("class path resource [ApplicationContext.xml]", pr));
    }
}

这将每五秒钟更新一次。

答案 1 :(得分:0)

由于我的项目必须使用各自的.properties文件,而我的父pom.xml仅使用.properties文件。它无法获取其他.properties文件。我的变量未在运行时更新的原因。我维护了一个common.properties文件,并将路径添加到pom.xml

现在我得到了预期的结果