当前位置: 首页 > 知识库问答 >
问题:

在Spring批处理作业之后触发Spring集成出站适配器

国言
2023-03-14

我的要求和帖子里描述的差不多。i、 例如,在文件生成器Spring批处理完成后触发Spring集成程序。这里我主要使用Spring集成示例:XML配置和测试。我观察到,测试程序将配置文件初始化为ClassPathXmlApplicationContext,然后根据需要设置一些值。忽略配置,程序的关键似乎是以下四行:

final File file = new File(sourceFileName);
final Message<File> message = MessageBuilder.withPayload(file).build();
final MessageChannel inputChannel = ac.getBean("inputChannel", MessageChannel.class);
inputChannel.send(message);

我想知道是否有一个选项可以将其移动到配置文件本身,这样我就不必从测试程序中创建消息或将其传递到MessageChannel,只需启动Spring批处理,并观察它在作业完成后调用出站SFTP触发器。如果完成了,我的工作基本完成了,这样我就可以在Spring批处理工作的下一步插入它。

如果你注意到入站适配器的例子,我可以用下面的代码行在配置文件中完成所有这些:

<int-sftp:inbound-channel-adapter id="sftpInbondAdapter"
        channel="receiveChannel"
        session-factory="sftpSessionFactory"
        local-directory="file:${inbound.local.directory}"
        remote-directory="${inbound.remote.directory}"
        auto-create-local-directory="true"
        delete-remote-files="false"
        filename-pattern="*.*">
    <int:poller max-messages-per-poll="-1" fixed-rate="1000" />
</int-sftp:inbound-channel-adapter>

<int:channel id="receiveChannel">
    <int:queue/>
</int:channel>

从测试程序中,我可以做如下操作:

PollableChannel localFileChannel = context.getBean("inboundFileChannel", PollableChannel.class);
System.out.println("Received first file message: " + localFileChannel.receive());

也许我错过了一些非常基本的东西。我还查看了前面帖子中引用的示例,它调用了一个Tasklet,在这个Tasklet中,用户再次初始化上下文文件,这在我的例子中似乎不是一个好方法,因为我将在相同的XML中使用Spring批处理和Spring集成配置,就像它看起来是一个循环调用一样。

共有1个答案

常睿范
2023-03-14

您可以使用消息网关。只需定义一个POJI并将其配置为

或者,使用JobLaunchingGateway启动批处理作业,然后在网关完成后执行sftp工作。

 类似资料:
  • 我正在从事一个spring批处理项目,其用例是:spring批处理作业依赖于SFTP服务器(远程目录)上的文件,因此,一旦文件在SFTP服务器上可用,相应的作业(spring批处理)就应该启动。此外,我不想先开始工作,然后再查找文件,因为这将是基于时间的方法,而不是基于通知的方法。所以我想使用spring集成(sftp入站通道适配器)。作为入站适配器(SFTP)的一部分,一旦我在SFTP服务器的远

  • 我如何处理在Spring整合中未能向Kafka传达的信息? 我在“int kafka:outbound channel adapter”中没有看到“error channel”是一个选项,我想知道应该在哪里添加错误通道信息,以便我的ErrorHandler可以获得“failed to kafka”类型的错误。(包括所有类型的故障、配置、网络等) 此外,inputToKafka是排队通道,我应该在哪

  • 我需要从远程SFTP服务器下载一个文件,并使用spring batch处理它们。我已经实现了使用Spring集成下载文件的代码。但我无法从Spring集成组件启动Spring批处理作业。我有以下代码: 但这不起作用(上一个方法中的错误),因为找不到文件类型的bean。我不能把这两部分连在一起。如何连接集成和批处理?

  • 我希望能够用REST控制器开始我的作业,然后当作业开始时,它应该在计划的基础上运行,直到我用REST再次停止它。

  • 我试图通过一个web url(Servlet/Spring MVC)触发一个批处理作业,当从主程序启动时,该url可以很好地工作。当我启动web服务器并点击url时,程序会给我一个异常,即jobLauncher未解析。 这是我完美工作的配置,批处理配置,主程序。我在这里通过servlet调用spring批处理 11:02:37.206[TOMCAT-HTTP-24]DEBUG o.s.web.se