gpt4 book ai didi

java - Spring 集成邮件轮询器

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:00 26 4
gpt4 key购买 nike

我想为我的邮件适配器配置一个轮询器,只运行一次或以编程方式运行。

这是一个独立的应用程序 (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 :

@Bean
public Trigger onlyOnceTrigger() {
return new Trigger() {
private final AtomicBoolean invoked = new AtomicBoolean();
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
return this.invoked.getAndSet(true) ? null : new Date();
}
};
}

哪个应该注入(inject)你的<int:poller>该适配器。

但是你应该注意一些barrier对于整个应用程序,如果您说它是独立的应用程序,并且在决定关闭应用程序之前您真的不应该丢失进程。

其中一个不错的选择是 CountDownLatch1算作一个 bean 。你应该从你的 main 等待它之前 System.exit(0)或者只在过程结束时使用最后一个:

<outbound-channel-adapter expression="T(System).exit(0)"/>

但是你应该多想想它是否真的适合你只运行一次适配器,如果那max-messages-per-poll="1"确实是个不错的选择。

邮箱里可能没有留言,所以onlyOnceTrigger可能对你来说没有好的结果,你的应用程序已经陷入空白......

关于java - Spring 集成邮件轮询器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com