我实现了一个sftp-inbound-adapter,应该每天下午2点启动,如果结果为空(没有收到文件),我希望在2小时后只进行一次重试,
如何使用重试机制执行此操作? 我的源代码如下:
<int-sftp:inbound-channel-adapter id="sftpInbondAdapter"
auto-startup="true" channel="receiveChannel" session-factory="sftpSessionFactory"
local-directory="file:local-dir" remote-directory="/"
auto-create-local-directory="true" delete-remote-files="false"
filename-regex=".*\.txt$">
<int:poller cron="0 0 14 * * ?"></int:poller>
<int-sftp:request-handler-advice-chain>
<ref bean="retryAdvice" />
</int-sftp:request-handler-advice-chain>
</int-sftp:inbound-channel-adapter>
答案 0 :(得分:0)
从4.2开始,您可以使用Smart Poller根据是否有消息来调整轮询频率。
开箱即用,当有消息V时,SimpleActiveIdleMessageSourceAdvice
使用不同的固定延迟(通过DynamicPeriodicTrigger
)。没有消息。
如果您不喜欢它的算法(它使用延迟,而不是cron表达式),您可以编写AbstractMessageSourceAdvice
的自定义子类。
我不确定你的retryAdvice
bean是什么,但重试通常只适用于有异常的情况。
修改强>
我已经创建了一个更适合您的新建议;见the gist here。
您可以像这样配置它......
...
<int:poller trigger="compoundTrigger">
<int:advice-chain>
<bean class="example.CompoundTriggerAdvice">
<constructor-arg ref="compoundTrigger"/>
<constructor-arg ref="secondary"/>
</bean>
</int:advice-chain>
</int:poller>
...
<bean id="compoundTrigger" class="example.CompoundTrigger">
<constructor-arg ref="primary" />
</bean>
<bean id="primary" class="org.springframework.scheduling.support.CronTrigger">
<constructor-arg value="0 0 14 * * ?" />
</bean>
<bean id="secondary" class="org.springframework.scheduling.support.PeriodicTrigger">
<constructor-arg value="7200000" />
</bean>
当没有收到任何消息时,我们将使用辅助触发器(2小时),否则使用cron触发器。