Spring Java - 如何在web.xml运行时更改applicationContext.xml中的属性值

时间:2016-05-06 13:00:41

标签: java xml spring maven applicationcontext

我正在使用web.xml,它会调用applicationContext.xml ......

在应用程序运行时,属性的值由数据库更改。

我使用嵌入到applicationContext.xml中的cronTriggerSchedule。更改了值${sched1},cronTriggerSchedule不知道此更改。

的applicationContext.xml:

<bean name="dailyCountJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass" value="com.honorius.job.CurrencyAddJob"/>
    <property name="group" value="DailyJobs"/>
    <property name="durability" value="true"/>
    <property name="requestsRecovery" value="true"/>
</bean>

<bean id="dailyCountJobCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="dailyCountJob"/>
    <property name="group" value="DailyJobsTriggers"/>
    <!--<property name="cronExpression" ref="cronExpression"/>-->
    <property name="cronExpression" value="${sched1}"/>
</bean>

<bean id="schedProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:ex.properties" />  
</bean>

ex.properties:

sched1=0/1 * * * * ?

CurrencyAddJob.java:

 FileInputStream in2 = new FileInputStream("C:\\Users\\HonoriusPc\\Desktop\\workspace\\honorius\\src\\main\\resources\\ex.properties");
        Properties props2 = new Properties();
        props2.load(in2);
        in2.close();
        FileOutputStream out2 = new FileOutputStream("C:\\Users\\HonoriusPc\\Desktop\\workspace\\honorius\\src\\main\\resources\\ex.properties");
        props2.setProperty("sched1", sched); //BOUNDED WITH DATABASE.
        props2.store(out2,null);
        out2.close();

应用程序停止并重新运行后,新值设置为cronTriggerSchedule。但我希望这些更改同时适用于应用程序。

我如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

Spring bean XML只被解析一次。但是您可以通过调用beans setter来更新bean值

jobTrigger.setCronExpression(...);