gpt4 book ai didi

java - 如何在 Spring config.xml 中配置 Cron 时区?

转载 作者:行者123 更新时间:2023-12-02 11:57:41 24 4
gpt4 key购买 nike

我有一个带有 Cron 任务的 Spring 配置 xml 文件。该任务在我的机器上定期执行。如何在 xml 文件中配置此任务以使用莫斯科时区(与我的时区不同)?

<task:scheduler id="scheduler" pool-size="1"/>

<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="productTask" method="loadProduct" cron="0 0 10 * * *"/>
</task:scheduled-tasks>

编辑:我仔细检查了语法并稍微更改了代码。但它对我来说仍然不起作用。下面我提供了我最后想到的配置。这里我得到以下异常:Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Cron expression must consist of 6 fields (found 1 in "moscowTimeCronSchedule")

因此任务“调度程序”需要 cron 表达式而不是 cron="moscowTimeCronSchedule" 。我需要弄清楚如何向其传递 bean 引用而不是纯 cron 表达式。

<task:scheduler id="scheduler" pool-size="1"/>

<bean id="moscowTimeZone" class="java.util.TimeZone" factory-method="getTimeZone">
<constructor-arg type="java.lang.String" value="Europe/Moscow"/>
</bean>

<bean id="moscowTimeCronSchedule" class="org.springframework.scheduling.support.CronTrigger"
c:expression="*/15 * * * * *"
c:timeZone-ref="moscowTimeZone"/>

<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="productTask" method="loadProduct" cron="moscowTimeCronSchedule"/>
</task:scheduled-tasks>

我发现此链接很有帮助,但它没有回答问题:如何传递 bean 而不是 cron 表达式。 http://websystique.com/spring/spring-job-scheduling-using-xml-configuration/

最佳答案

当 Spring 配置 CronTask 时,它使用一个接受 String 的简单构造函数形式。您需要的是它使用第二个构造函数,它接受 CronTrigger。这应该可行(尽管,不可否认,我还没有测试过):

<bean
id="moscowTimeZone"
class="java.util.TimeZone"
factory-method="getTimeZone">
<constructor-arg type="java.lang.String" value="Europe/Moscow"/>
</bean>

<bean
id="moscowTimeCronSchedule"
class="org.springframework.scheduling.support.CronTrigger">
<constructor-arg type="java.lang.String" value="0 0 10 * * *"/>
<constructor-arg type="java.util.TimeZone" ref="moscowTimeZone"/>
</bean>

<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="productTask" method="loadProduct" trigger="moscowTimeCronSchedule"/>
</task:scheduled-tasks>

我在这里做了什么:

  1. 构造了对莫斯科时区的引用并将其保存为 Spring 配置中的 bean。

  2. 使用该时区和 cron 表达式将 Cron 触发器实例构造为另一个 bean

  3. 在计划任务构造函数中使用了 Cron 触发器。

诚然,这个解决方案有点啰嗦,但听起来它应该能完成它的工作。

关于java - 如何在 Spring config.xml 中配置 Cron 时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47471853/

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