我想爲我的郵件適配器配置輪詢器,只運行一次或以編程方式運行它。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