Java 如何在Spring3中配置自定义触发器?

Java 如何在Spring3中配置自定义触发器?,java,spring,scheduling,Java,Spring,Scheduling,我需要配置一个调度算法,该算法超出了Spring内部构建调度的能力(基本上是“每5分钟,但仅在4:00h和16:00h之间”)。实现org.springframework.scheduling.Trigger接口似乎是一条可行之路,这似乎足够简单 我想不出的部分似乎没有得到回答:这是如何与XML配置相结合的?似乎没有任何方法可以在任务名称空间的元素中指定自定义触发器bean(除了Quartz示例) 如何在Spring3应用程序中使用自定义触发器?理想情况下使用Bean XML配置。看看我一年前写

我需要配置一个调度算法,该算法超出了Spring内部构建调度的能力(基本上是“每5分钟,但仅在4:00h和16:00h之间”)。实现org.springframework.scheduling.Trigger接口似乎是一条可行之路,这似乎足够简单

我想不出的部分似乎没有得到回答:这是如何与XML配置相结合的?似乎没有任何方法可以在任务名称空间的元素中指定自定义触发器bean(除了Quartz示例)

如何在Spring3应用程序中使用自定义触发器?理想情况下使用Bean XML配置。

看看我一年前写的

公共类DurationTrigger实现触发器{
/**
*创建一个具有给定时间段、开始和结束时间的触发器,该时间段、开始和结束时间定义了一个任务将执行的时间窗口
*预定在

*/ 公共持续时间触发器(日期开始时间、日期结束时间、长周期){…} // ... }
以下是使用此触发器安排此类任务的方式:

Trigger Trigger=新的持续时间触发器(开始时间、结束时间、期间);
ScheduledFuture task=taskScheduler.schedule(packageDeliveryTask,触发器);
或者,您可以使用CronTrigger/cron表达式:


看看这个以及这个Spring集成

编辑

在JIRA讨论中,您可以使用Spring Integration配置上面的
DurationTrigger
,或任何其他自定义触发器:

<inbound-channel-adapter id="yourChannelAdapter"
                         channel="yourChannel">
    <poller trigger="durationTrigger"/>
</inbound-channel-adapter>

<beans:bean id="durationTrigger" class="org.gitpod.scheduler.trigger.DurationTrigger">
    <beans:constructor-arg value="${start.time}"/>
    <beans:constructor-arg value="${end.time}"/>
    <beans:constructor-arg value="${period}"/>
</beans:bean>


在项目中使用Spring集成非常简单,即使您不打算这样做。您可以尽可能少地使用上面的调度部分,也可以尽可能多地依赖Spring Integration提供的许多其他企业集成模式。

似乎在Spring 3.0中不可能使用XML配置除两个标准触发器之外的任何触发器。在3.1M2版本中,它已作为一项新功能添加,不过:


感谢马克·费舍尔的支持。

谢谢,托利修斯。我仍然不明白如何通过编程来安排一个重复性任务(如果我是正确的,那么你的例子就是一个单一事件);我仍然觉得我不能通过XML配置来安排它(我需要@cron属性的等价物)。不知何故,我忘记了cron语法允许时间间隔--“0 0/5 4-15**?”对于我的用例应该可以正常工作。是的。上面的
cron表达式实际上是您正在寻找的一个XML配置:)但是cron表达式有局限性。我现在不担心什么,但我把它作为一个评论放在你的JIRA票证上。它对你的用例真的没有任何限制@Oleg Zhurakousky在给JIRA的评论中给了你一个例子。谢谢-我忘了在这个问题上放手表,所以我没有注意到。我不认为他是对的,但让我们继续下去。