gpt4 book ai didi

java - 启动 Spring 批处理作业

转载 作者:行者123 更新时间:2023-12-02 06:41:33 27 4
gpt4 key购买 nike

我有一个问题,我需要从 MQ 队列接收一系列消息并将其写入文件并使用该文件作为输入启动 spring 批处理作业。现在我正在考虑使用有线 @Autowired JobLauncher jobLauncher 和 @Autowired Job job; 从 MDB 本身启动工作。但我觉得这不是一个好方法,因为 spring batch 可能会创建一个系列线程和 EJB 本身不支持多线程。

还有其他有效的方法吗?我不想使用 quartz 调度程序或其他任何东西,因为它增加了复杂性。 spring batch 本身是否有任何接口(interface)可以在文件进入目录后立即启 Action 业?如果能更好地做到这一点,我们将不胜感激。

谢谢。

最佳答案

  • 我有一个问题,我需要从 MQ 队列接收一系列消息并将其写入文件并使用该文件作为输入启动 spring 批处理作业

这样做的一种方法是使用一些 Spring Integration,其中您将有一个文件轮询器,它会轮询一个新文件:

<file:inbound-channel-adapter id="filePoller"
channel="filesAreComing"
directory="file:${input.directory}"
filename-pattern="test*" />

file message ( java.io.File ) 调整为 file name ( String ),因为这是 Spring Batch 所需要的。这可以通过 JobLauncher 适配器来完成,它已经可以从 Spring Batch Admin 获得 here :

@ServiceActivator
public JobLaunchRequest adapt(File file) throws NoSuchJobException {

JobParameters jobParameters = new JobParametersBuilder().addString(
"input.file", file.getAbsolutePath()).toJobParameters();

return new JobLaunchRequest(job, jobParameters);
}

将其包装到 JobLaunchRequest(它只是一个 JobJobParameters 的持有者)并发送此请求 [作为消息]到 JobLaunchingMessageHandler:

<service-activator input-channel="jobLauncher">
<beans:bean class="org.springframework.batch.integration.launch.JobLaunchingMessageHandler">
<beans:constructor-arg ref="jobLauncher" />
</beans:bean>
</service-activator>

这将启 Action 业。

“input.file”是一个在运行时绑定(bind)的参数(因此 #{...} ):

<bean id="reader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="resource" value="#{jobParameters[input.file]}" />
... line mapper and other props
</bean>

关于java - 启动 Spring 批处理作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099543/

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