小编fea*_*tur的帖子

如何控制并行Spring Batch作业的数量

我有一个报告生成应用程序.由于准备此类报告是重量级的,因此它们与Spring Batch异步准备.使用HTTP通过REST接口创建此类报告的请求.

目标是REST资源简单地将报告执行排队并完成(如文档中所述).因此,为JobLauncher提供了一个TaskExecutor:

    <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
        <property name="jobRepository" ref="jobRepository" />
        <property name="taskExecutor">
        <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

由于报告非常重量级,因此在给定时间内只能生成指定数量的报告.希望能够将Spring Batch配置为一次只生成2个实例,已指定concurrencyLimit:

    <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
        <property name="jobRepository" ref="jobRepository" />
        <property name="taskExecutor">
        <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor">
            <property name="concurrencyLimit" value="2" />
        </bean>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

不幸的是,当2个作业已经运行时,启动作业调用被阻止:jobLauncher.run(job,builder.toJobParameters());

显然jobLauncher会立即尝试执行作业.我想象一旦线程可用,它就会排队执行作业.这样,我可以通过简单地添加其他处理实例来扩展我的应用程序,所有这些都使用相同的作业存储库

在这里问了类似的问题.我即将开始探索Spring Batch Integration,但我不确定这是否是正确的方向.

我的用例对我来说似乎并不常见,难道不应该有一个广泛讨论的模式,我显然无法找到它吗?

谢谢f

spring spring-integration spring-batch

5
推荐指数
2
解决办法
9977
查看次数

标签 统计

spring ×1

spring-batch ×1

spring-integration ×1