Spring Integration:在固定的持续时间后停止轮询

时间:2014-05-29 13:25:20

标签: spring-integration poller

我的要求是我希望在固定的时间间隔9(小时)后停止轮询。现在我试图在1分钟后停止轮询。以下是我的代码:

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

<int-task:scheduled-tasks scheduler="scheduler">    
   <int-task:scheduled ref="incomingFiles.adapter" method="stop" fixed-delay="#{10  *     1000}"/>
</int-task:scheduled-tasks>

但现在我观察到的是,当我启动程序然后在启动时,我立即在控制台中收到消息:

> INFO: Starting beans in phase 0 May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.AbstractEndpoint start INFO:
> started incomingFiles.adapter May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.EventDrivenConsumer
> logComponentSubscriptionEvent INFO: Adding {service-activator} as a
> subscriber to the 'incomingFiles' channel May 28, 2014 10:27:55 AM
> org.springframework.integration.channel.AbstractSubscribableChannel
> adjustCounterIfNecessary INFO: Channel
> 'org.springframework.context.support.ClassPathXmlApplicationContext@f4d5bc9.incomingFiles'
> has 1 subscriber(s). May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.AbstractEndpoint start INFO:
> started
> org.springframework.integration.config.ConsumerEndpointFactoryBean#0
> May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.EventDrivenConsumer
> logComponentSubscriptionEvent INFO: Adding {router} as a subscriber to
> the 'contextStartedEventChannelChannel' channel May 28, 2014 10:27:55
> AM org.springframework.integration.channel.AbstractSubscribableChannel
> adjustCounterIfNecessary INFO: Channel
> 'org.springframework.context.support.ClassPathXmlApplicationContext@f4d5bc9.contextStartedEventChannelChannel'
> has 1 subscriber(s). May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.AbstractEndpoint start INFO:
> started
> org.springframework.integration.config.ConsumerEndpointFactoryBean#1
> May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.EventDrivenConsumer
> logComponentSubscriptionEvent INFO: Adding
> {outbound-channel-adapter:trueChannel.adapter} as a subscriber to the
> 'trueChannel' channel May 28, 2014 10:27:55 AM
> org.springframework.integration.channel.AbstractSubscribableChannel
> adjustCounterIfNecessary INFO: Channel
> 'org.springframework.context.support.ClassPathXmlApplicationContext@f4d5bc9.trueChannel'
> has 1 subscriber(s). May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.AbstractEndpoint start INFO:
> started trueChannel.adapter May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.EventDrivenConsumer
> logComponentSubscriptionEvent INFO: Adding
> {outbound-channel-adapter:falseChannel.adapter} as a subscriber to the
> 'falseChannel' channel May 28, 2014 10:27:55 AM
> org.springframework.integration.channel.AbstractSubscribableChannel
> adjustCounterIfNecessary INFO: Channel
> 'org.springframework.context.support.ClassPathXmlApplicationContext@f4d5bc9.falseChannel'
> has 1 subscriber(s). May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.AbstractEndpoint start INFO:
> started falseChannel.adapter May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.EventDrivenConsumer
> logComponentSubscriptionEvent INFO: Adding
> {logging-channel-adapter:_org.springframework.integration.errorLogger}
> as a subscriber to the 'errorChannel' channel May 28, 2014 10:27:55 AM
> org.springframework.integration.channel.AbstractSubscribableChannel
> adjustCounterIfNecessary INFO: Channel
> 'org.springframework.context.support.ClassPathXmlApplicationContext@f4d5bc9.errorChannel'
> has 1 subscriber(s). May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.AbstractEndpoint start INFO:
> started _org.springframework.integration.errorLogger May 28, 2014
> 10:27:55 AM
> org.springframework.integration.file.FileReadingMessageSource receive
> INFO: Created message: [[Payload File
> content=C:\TEMP\incomingFile\ETD.CONFIRM.60326.140519.T0613170][Headers={id=b003893a-e013-57c8-0c96-55db627ec643, timestamp=1401287275402}]] May 28, 2014 10:27:55 AM
> org.springframework.integration.endpoint.AbstractEndpoint stop INFO:
> stopped incomingFiles.adapter

在starttup日志开始的某个地方我们得到:

  

2014年5月28日上午10:27:55   org.springframework.integration.endpoint.AbstractE ndpoint start INFO:   启动了incomingFiles.adapter

在启动日志的最后某处我们得到:

  

2014年5月28日上午10:27:55   org.springframework.integration.endpoint.AbstractE ndpoint stop INFO:   已停止incomingFiles.adapter

为什么在我们的fixed-delay =“#{10 * 1000}”为10秒时,incomingFiles.adapter立即停止。时间完全相同,绝对没有延迟。所以理想情况下,投手应在10秒后停止。而不是立即。目录中还有4个文件,只有一个文件。

请说明错误。

1 个答案:

答案 0 :(得分:1)

嗯,我明白了。在

<int-task:scheduled ref="incomingFiles.adapter" method="stop" 
         fixed-delay="#{10 * 1000}"/>

生成PeriodicTrigger,其结果(nextExecutionTime)取决于triggerContext.lastScheduledExecutionTime(),如果它是null(您的情况),则会立即调用基础方法。 我们来试试吧!

<task:scheduled ref="incomingFiles.adapter" method="stop" 
        fixed-delay="#{10 * 1000}" initial-delay="#{10 * 1000}"/>

我的意思是initial-delay相同值,以推迟第一次停止任务所需的时间。