我有一个带有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")
所以任务&#34;调度程序&#34;需要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/
答案 0 :(得分:1)
当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>
我在这里做了什么:
构建了对莫斯科时区的引用,并将其保存为弹簧配置中的bean。
使用该时区和cron表达式构建一个Cron Trigger实例作为另一个bean
在计划任务构造函数中使用Cron触发器。
不可否认,这个解决方案有点啰嗦,但听起来应该可以胜任。