簡體   English   中英

啟動 Spring 批處理作業

[英]Launching Spring batch job

我有一個問題,我需要從 MQ 隊列接收一系列消息並將其寫入文件並以文件作為輸入啟動 spring 批處理作業。 現在我正在考慮使用有線@Autowired JobLauncher jobLauncher and @Autowired Job job; 來自 MDB 本身。但我覺得這不是一個好方法,因為 spring 批處理可能會創建一系列線程,而 EJB 不支持多線程。

有沒有其他有效的方法來做到這一點? 我不想使用石英調度程序或其他任何東西,因為它增加了復雜性。 spring 批處理本身是否有任何接口在文件進入目錄后立即啟動作業? 任何能更好地做到這一點的線索將不勝感激。

謝謝。

  • 我有一個問題,我需要從 MQ 隊列接收一系列消息並將其寫入文件並以文件作為輸入啟動 spring 批處理作業

一種方法是使用一點 Spring 集成,您將有一個文件輪詢器,它將輪詢新文件:

<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 獲得:

@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>

那將啟動這項工作。

“input.file”是在運行時綁定的參數(因此是 #{...} ):

<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>

我不確定我理解為什么你有一個消息隊列、一個消息驅動的 POJO/EJB 和一個批處理作業。

一種方法是讓消息驅動的 POJO/EJB 完成這項工作。 這已經是一個異步過程。 您可以匯集消息驅動的 bean,以便有足夠的工作人員來處理負載。 為什么要增加復雜性?

如果您不想這樣做,請忘記隊列並單獨使用 Spring Batch。 我不會兩者都做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM