【问题标题】:Spring Integration Inbound-channel-adapter: make one poll and exitSpring Integration Inbound-channel-adapter:进行一次轮询并退出
【发布时间】:2015-01-20 15:11:43
【问题描述】:

我需要制作一个小型 Spring Integration 应用程序,将一个表从 JDBC 源同步到另一个,我只需要偶尔启动该脚本。

我想从入站通道适配器进行一次轮询(等待消息流过链)并退出应用程序。

我找不到任何明显的方法来做到这一点:有什么建议吗?

【问题讨论】:

  • 感谢史蒂夫指出正确的解决方案!

标签: spring-integration


【解决方案1】:

@Steve 建议正确的解决方案。

你应该让你的<poller> 和一些长的fixed-delay 不开始一个新的轮询任务。或者在轮询任务运行后停止<inbound-channel-adapter>。为此,只需将channel 设为<publish-subscribe-channel> 并添加一个订阅者,例如:

<outbound-channel-adapter channel="processChannel" expression="@adapter.stop()">

所以,这是第一部分:如何只制作单个poll

回复。 System.exit()

您应该在流程末尾添加类似 outbound-channel-adapter:

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

【讨论】:

  • 感谢 Artem!绝妙的解决方案!使用表达式退出应用程序就像一个魅力!
  • 很抱歉恢复这个老问题,但我正在处理一个类似的问题,想知道你是否可以发布你的解决方案的 sn-p。我的 SI 应用程序使用 int-jdbc:stored-proc-inbound-channel-adapterint-file:outbound-channel-adapter。我将我的&lt;int:channel&gt; 配置更改为&lt;int-publish-subscribe-channel&gt;,但是在我的解决方案中我应该在哪里插入outbound-channel-adapters?我需要在 Java 代码中添加订阅者吗?有没有例子?抱歉,刚接触 Spring(集成)并且仍在尝试弄清楚一切是如何工作的......
  • &lt;oubound-channel-adapter&gt; 放在哪里都没有关系。唯一重要的是您应该为该适配器使用相同的&lt;int-publish-subscribe-channel&gt;。并且不要忘记使用order 选项使其成为第二个订阅者。有关这些组件和选项,请参阅 XSD 文档。
  • 是的,看起来像。输入适配器向通道发送消息,输出 - 接收。
  • 没有意义......正是order 负责。并且您正确使用它。也许你有一些 async 交接?如果您启动一个新的 SO 线程并在那里共享调试日志以确认即使使用这样的配置,exit(0) 也会在文件写入之前发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多