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

如何控制平行Spring批量作业的数量

柴宝
2023-03-14

我有一个报告生成应用程序。由于这类报告的准备是重量级的,因此它们是用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>

由于报告确实是重量级的,在给定的时间内只能生成特定数量的报告。为了能够将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>

谢谢f

共有1个答案

胡利
2023-03-14

SimpleAsynctaskExecutor不建议大量使用,因为它为每个任务生成一个新线程。它也不支持更健壮的概念,如线程池和任务队列。

如果您看一下ThreadPoolTaskExecutor,它支持一种更健壮的任务执行范例,比如任务排队和使用线程池而不是产生随机的、未重用的线程

您可以在以下位置阅读有关javadoc中ThreadPooltaskExecutor的更多信息:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/schedulation/concurrent/threadPooltaskExecutor.html

 类似资料:
  • 我怎样才能停止一个工作在Spring批次?我尝试使用下面的代码来使用这个方法: 我尝试也完成了,失败了,但这个方法不工作,作业继续执行。有解决办法吗?

  • 我的spring批处理应用程序运行在连接到MySQL数据库(单实例)的PCF平台上,只有一个实例启动时运行良好

  • 我有一个作业流,我希望以以下方式运行它: 作业流将从Job1开始。在Job1成功完成后,Job1将同时启动Job2和Job4。 Job2和Job4将并行运行。 在Job2成功完成后,Job2将启动Job3。 在Job4成功完成后,Job4将启动Job5。 下面是job1.xml和job1的作业启动器类的代码片段: job1.xml uijobLauncher.java “job2,Job3”对和“

  • 问题内容: 运行main方法时,将执行作业。这样我无法弄清楚如何控制作业的执行。例如,您如何安排作业,访问作业执行或设置作业参数的方式。 我试图注册自己的JobLauncher 但是当我尝试在主要方法中使用它时: 当加载上下文时,该作业再次执行,而当我尝试手动运行它时,我得到了。有没有办法防止自动作业执行? 问题答案: 通过设置可以防止作业执行 在application.properties中。或

  • 我按照这个示例使用Boot进行Spring批处理。 运行main方法时,作业将执行。这样我就不知道如何控制作业的执行了。例如如何排定作业、访问作业执行或设置作业参数。 我尝试注册自己的JobLauncher 但当我尝试在主法中使用时: 当加载上下文时,再次执行作业,并且尝试手动运行作业时得到。有没有办法防止自动执行作业?

  • 在产品发布的最后一分钟,我发现Java Spring批处理有一个奇怪的问题。它进入无限循环。 这是我的配置: 记录总数为10条。因此,提交是在处理每一条记录之后进行的。我正在将结果写入Writer中的数据库。 我从阅读器中一个接一个地获取项目,处理并写入数据库。 它一直在运行,并将数据无限地插入表中。 观察结果是:提交间隔 如果有人提出一些解决方案/解决方法,在因为这个问题而举行生产发布时,这将对