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

等待异步批处理作业结果的Spring集成配置

谷翰飞
2023-03-14

我使用Spring Batch admin项目,在该项目中,我得到了一个异步处理特定文件夹中文件的作业。目前,我通过batch admin ui通过传递相关作业参数来运行它。

现在,我正试图通过使用文件入站通道适配器自动化此过程。我已经配置了服务激活器,它将在收到文件时调用批处理作业。我现在有一个新的要求,即在第一个文件上载作业完成后调用另一个批处理作业。为此,我创建了另一个服务激活器,它使用第一个服务激活器的输出通道。但由于批处理作业是异步运行的,因此下一个批处理作业将立即执行。是否有办法让第二批作业等待第一批作业完成。

我目前的配置是

 <file:inbound-channel-adapter id="filesIn" directory="file:${input.directory}" filename-pattern="*.csv" prevent-duplicates="true">
    <integration:poller id="poller" fixed-delay="10000"/>
</file:inbound-channel-adapter>
<integration:channel id="statusChannel"/>

<integration:service-activator input-channel="filesIn" output-channel="statusChannel"
                               ref="handler" method="process"/>

<bean id="handler" class="AnalysisMessageProcessor"> 
    <property name="job" ref="A-importGlobalSettingsDataJob"/> <!--1st job -->
    <property name="requestHandler" ref="jobMessageHandler"/>
</bean>       

<bean id="jobMessageHandler" class="org.springframework.batch.integration.launch.JobLaunchingMessageHandler">
    <constructor-arg ref="jobLauncher" /> <!--spring batch admins async job launcher -->
</bean>                         

<integration:service-activator input-channel="statusChannel" ref="jobHandler" method="process"/>   
<bean id="jobHandler" class="JobHandler"> <!--This Job handler should get invoked only after the 1st batch job is completed. Currently I am just printing the exit status code of 1st job-->

任何帮助都将非常感激。

共有1个答案

易宏阔
2023-03-14

你基本上有两个选择:

  • 主动轮询作业执行状态
  • 触发下一批作业(第二个Spring集成流的一部分?)在使用侦听器的事件驱动方法中

对于第一种方法签出“查询存储库”(Spring Batch参考文档的一部分):

  • http://static.springsource.org/spring-batch/reference/html/configureJob.html#queryingRepository

第二种选择通常是最好的。因此,我相信您可能需要考虑使用Spring Batch JobExecutionListener

  • http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/JobExecutionListener.html

请查看以下文档中的“提供反馈信息”部分:

  • https://html" target="_blank">github.com/ghillert/spring-batch-admin/blob/BATCHADM-160/spring-batch-integration/README.md#providing-带有信息性消息的反馈
 类似资料:
  • null 重新创建问题的测试可以在https://github.com/hawk1234/spring-integration-example commit 9f121f0729d8076872e6fbdcd7b1b91ca9ea8cb4中找到。当您运行测试时,应用程序日志可以在路径build/logs/spring-integration-example.log下获得。当前测试挂起,因为网关从未

  • 我正在用异步JobLauncher在Spring Batch中配置一个(长时间运行的)作业,我有两个RESTendpoint: null 谢谢朱利奥

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

  • 我遵循了spring批处理文档,无法异步运行我的作业。 因此,我从一个web容器运行该作业,该作业将通过RESTendpoint触发。 我想让JobInstance ID在完成整个作业之前传递它作为响应。因此,他们可以稍后使用JobInstance ID检查作业的状态,而不是等待。但我没能让它工作。下面是我尝试过的示例代码。请让我知道我错过了什么或错了什么。 BatchConfig创建异步JobL

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。