【问题标题】:Spring integration : handle a File given in argumentsSpring集成:处理参数中给出的文件
【发布时间】:2018-04-24 07:08:35
【问题描述】:

我有一个现有的 Spring Integration 应用程序,它使用 InboundChannelAdapter 处理来自 FTP 的文件。我想将 Spring Boot 插入此应用程序,以便现在像这样使用它:

java -jar app.jar <filetohandlepath>

所以,应用程序从这个命令开始,并在处理结束时停止。但我的问题是如何运行我现有的频道 (ServiceActivator) 来处理这个文件?

  • 我可以使用InboundChannelAdapter,但我认为poller 可能是个问题
  • 也许是Gateway?但我认为这不是一个解决方案
  • 或者我需要手动构建和发送消息?

Spring Boot 怎样处理参数?我需要将消息构建到 main 方法中,还是在其他类中进行扫描?

我只需要知道设计我的应用的最佳方式。

【问题讨论】:

    标签: spring file spring-boot arguments spring-integration


    【解决方案1】:

    您的 FTP 入站通道适配器将远程文件轮询到本地文件,并将它们作为消息的有效负载发送到上述服务激活器的某个通道中。当然,您可以使用该服务激活器订阅者接受的有效负载手动将消息发送到同一通道。是的,您可以使用@MessagingGateway 将消息传递问题与您的代码分开。或者您可以只依赖MessagingTemplate 及其convertAndSend() API。任何方便的方式都可以接受:https://docs.spring.io/spring-integration/docs/5.0.4.RELEASE/reference/html/messaging-endpoints-chapter.html#gateway

    至于 Spring Boot 和命令行参数,你绝对可以看看CommandLineRunnerhttps://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#boot-features-command-line-runner

    【讨论】:

    • 我不想再使用InboundChannelAdapter,我只需要在开始和停止应用程序时发送一条消息。但是现在,有了 Spring Boot,一切都加载了上下文,然后是我运行的应用程序,这就是为什么我认为我更喜欢使用 MessagingTemplate,这似乎更容易。但是我该如何运行它?我的意思是,可以制作 bean,或者在构建这个 MessagingTemplate 的上下文中加载一个类?因为我试过了,它返回一个NullPointerExceptions
    • 对,你可以创建一个MessagingTemplate bean 并将其注入到CommandLineRunner 中。
    • 谢谢,这正是我所需要的!但是我的errorChannel似乎不起作用,当我们像这样启动应用程序时这正常吗?
    • 听起来与主题问题无关。如果您手动发送消息,您应该期望捕获一个异常。实际上,这里已经没有涉及任何错误通道。
    • 但是我已经有一个“errorChannel”,有一个处理异常的“exception-type-router”,所以如果我使用MessagingTemplate,如果有异常可以调用它?
    猜你喜欢
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多