我想为我的邮件适配器配置轮询器,只运行一次或以编程方式运行它。Spring集成邮件轮询器
这是一个独立的应用程序(java -jar xxxx.jar)
,所以我想也许一个选择是配置fixed-rate
属性,为任意最大值,然后退出应用程序,即:System.exit(0)
。
对于这种情况,是否有更多的替代方案或某种“正确方法”?
这是我integration-context.xml
:
<int-mail:inbound-channel-adapter id="imapAdapter"
store-uri="imaps://${imap.user}:${imap.password}@${imap.server.ip}:${imap.server.port}/inbox"
channel="receiveChannel"
auto-startup="true"
should-delete-messages="false"
should-mark-messages-as-read="false"
java-mail-properties="javaMailProperties"
mail-filter-expression="subject matches '(?i)*UNSUSCRIBE*'">
<int:poller max-messages-per-poll="1" fixed-rate="5000"/>
</int-mail:inbound-channel-adapter>
PS:遗憾的是imap-idle-channel-adapter
是不是一种选择。
太谢谢你了!我成功地使用onlyOnceTrigger。我有另一个问题,我使用DirectChannel来接收消息。上面提到的屏障是正确的渠道,还是应该使用其他渠道? (我不知道什么时候该过程完成,因此做countDown锁)我有一些像'receiveChannel.suscribe()...' – whyem 2014-10-13 19:36:44
其实,哪个频道类型是'轮询之后并不重要'。从另一方面来说,有时候'DirectChannel'会更好,因为这个downstrem过程将在poller的线程内完成。所以你不要开始一个新的。无论如何,对于你的情况'poller'是separete线程,你真的应该等待该线程的结果,或者只是从进程结束时调用'System.exit(0)'。回答你的问题:不,渠道不是“障碍”。这是应该阻止你的应用无条件地调用'System.exit(0)'的东西。 – 2014-10-14 07:28:38