使用 Spring 任务命名空间将任务计划为运行一次
我正在使用任务命名空间在春季设置计划任务方案。
我想根据cron表达式将大多数任务安排为触发,而有些任务仅触发一次,启动后固定延迟,然后再也不触发(即SimpleTriggerBean上的设置将实现)。repeatCount
0
是否可以在任务命名空间中实现此目的,或者我是否需要恢复为触发器定义 Bean?
我正在使用任务命名空间在春季设置计划任务方案。
我想根据cron表达式将大多数任务安排为触发,而有些任务仅触发一次,启动后固定延迟,然后再也不触发(即SimpleTriggerBean上的设置将实现)。repeatCount
0
是否可以在任务命名空间中实现此目的,或者我是否需要恢复为触发器定义 Bean?
如果不需要初始延迟,可以使其在启动时“仅运行一次”,如下所示:
<task:scheduled-tasks>
<!-- Long.MAX_VALUE ms = 3E8 years; will run on startup
and not run again for 3E8 years -->
<task:scheduled ref="myThing" method="doStuff"
fixed-rate="#{ T(java.lang.Long).MAX_VALUE }" />
</task:scheduled-tasks>
(当然,如果你认为你的代码将运行超过3E8年,你可能需要一种不同的方法......)
如果你需要一个初始延迟,你可以按如下方式配置它(我正在用Spring 3.1.1进行测试) - 这不需要任何额外的依赖项,你不必编写自己的触发器,但你必须配置Spring提供的:PeriodicTrigger
<bean id="onstart" class="org.springframework.scheduling.support.PeriodicTrigger" >
<!-- Long.MAX_VALUE ms = 3E8 years; will run 5s after startup and
not run again for 3E8 years -->
<constructor-arg name="period" value="#{ T(java.lang.Long).MAX_VALUE }" />
<property name="initialDelay" value="5000" />
</bean>
<task:scheduled-tasks>
<task:scheduled ref="myThing" method="doStuff" trigger="onstart" />
</task:scheduled-tasks>
Spring 3.2似乎直接支持“初始延迟”属性,但我还没有对此进行测试;我猜这是有效的:
<task:scheduled-tasks>
<task:scheduled ref="myThing" method="doStuff"
fixed-rate="#{ T(java.lang.Long).MAX_VALUE }"
initial-delay="5000"/>
</task:scheduled-tasks>
我的工作示例:
<bean id="whateverTriggerAtStartupTime" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="whateverJob"/>
<property name="repeatCount" value="0"/>
<property name="repeatInterval" value="10"/>
</bean>