gpt4 book ai didi

java - 使用 Spring 任务命名空间安排任务运行一次

转载 作者:IT老高 更新时间:2023-10-28 13:53:20 24 4
gpt4 key购买 nike

我正在使用任务命名空间在 Spring 设置计划任务方案。

我想安排大多数任务根据 cron 表达式触发,有些只触发一次,启动后有固定延迟,然后再也不触发(即,将 repeatCount 设置为 0 上的 SimpleTriggerBean 将实现)。

是否可以在任务命名空间中实现这一点,或者我是否需要恢复为我的触发器定义 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 years,您可能需要不同的方法...)

如果你需要一个初始延迟,你可以按如下方式配置它(我正在使用 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 似乎直接支持“initial-delay”属性,但我没有对此进行测试;我猜这可行:

<task:scheduled-tasks>
<task:scheduled ref="myThing" method="doStuff"
fixed-rate="#{ T(java.lang.Long).MAX_VALUE }"
initial-delay="5000"/>
</task:scheduled-tasks>

关于java - 使用 Spring 任务命名空间安排任务运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3564361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com