2

在 web sphere 上部署时,是否可以通过一些自定义属性指定固定延迟间隔或 cron 间隔模式。目前,在我的配置中,固定延迟间隔是在应用程序上下文 xml 文件中指定的。但是,此文件将被打包在 EAR 中,并且对间隔的更改需要重新部署应用程序。

这是我的应用程序上下文文件:

<bean id="taskScheduler" class="org.springframework.scheduling.commonj.TimerManagerTaskScheduler"> 
    <property name="timerManager" ref="timerManager" />
</bean>
<bean id="taskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
    <property name="workManager" ref="workManager" />
</bean>

<task:scheduled-tasks scheduler="taskScheduler">
    <task:scheduled ref="transactionProcessingService" method="processTransactions" fixed-delay="30000"/>
    <task:scheduled ref="transactionProcessingService" method="processOrderTransactions" fixed-delay="50000"/>
</task:scheduled-tasks>

感谢您的建议。

4

2 回答 2

1

在您的应用程序上下文中添加以下内容

   <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
         <property name="location" value="classpath:sample.properties"/>
          <property name="ignoreUnresolvablePlaceholders" value="true"/>
          <property name="ignoreResourceNotFound" value="true"/>
          <property name="order" value="0"/>
   </bean>

您的 sample.properties 文件

process_transactions = 30000
processOrder_transactions = 3000 

将以下内容替换为您的代码。

<task:scheduled-tasks scheduler="taskScheduler">
    <task:scheduled ref="transactionProcessingService" method="processTransactions" fixed-delay="${process_transactions}"/>
    <task:scheduled ref="transactionProcessingService" method="processOrderTransactions" fixed-delay="${processOrder_transactions}"/>
</task:scheduled-tasks>
于 2013-08-12T14:24:28.073 回答
0

您可以使用<util:properties />标签从文件中加载属性:

  1. 将您的值移动到某个属性文件(例如app.properties

    process_transactions=30000
    process_order_transactions=3000 
    
  2. properties通过命名空间中的标签加载它们util(不要忘记声明util命名空间

    <util:properties id="appConfig" location="classpath:app.properties" />
    
  3. 使用${variable}语法设置它们:

    <task:scheduled-tasks scheduler="taskScheduler">
        <task:scheduled ... fixed-delay="${process_transactions}"/>
        <task:scheduled ... fixed-delay="${process_order_transactions}"/>
    </task:scheduled-tasks>
    

编辑。正如@user320587 所解释的,我们可以通过在 Websphere 中使用 JVM 自定义属性来覆盖应用程序属性值(并避免重新部署):

通过将它与 PropertyPlaceHolderConfigurer 中可用的 systemPropertiesModeName 属性一起使用,我们可以避免重新部署。我已将属性值设置为 Websphere 中 JVM 自定义属性的一部分,并且在应用程序启动时进行替换。因此,要更改间隔值,我可以修改自定义属性值并重新启动应用程序。

于 2013-08-12T15:12:32.180 回答