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

如何通过线程池运行spring-batch作业?

经骁
2023-03-14

我正在使用joblauncher.run()启动spring-batch作业。问题:我如何线程化这些调用?以便最多有4个作业线程可以并发运行,而任何其他作业都只是排队?

    @Autowired
    private JobRegistry registry;

    @Autowired
    private JobLauncher launcher;

Job job = registry.getJob("jobname");
launcher.run(job, params); //immediately starts the job

共有1个答案

潘智刚
2023-03-14

您可以将ThreadPoolTaskExecutor设置为SimpleJobLauncher(实际启动作业的类)使用的任务执行器。这个执行器有一些您可以设置的属性,特别是MaxPoolSize。

public JobLauncher createJobLauncher() {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(4);
    taskExecutor.setMaxPoolSize(4);
    taskExecutor.afterPropertiesSet();

    SimpleJobLauncher launcher = (SimpleJobLauncher) super.createJobLauncher();
    launcher.setTaskExecutor(taskExecutor);
    return launcher;
}
 类似资料:
  • 我有一个Spring批处理应用程序,它从DB表中读取记录并在Writer类中调用REST API以获取要缓存的数据。然而,我观察到并非线程池中的所有线程都在运行。它们只是以4-5的批处理运行,因为应用程序需要5小时才能进行120K调用。以下是Spring批处理上下文 任务执行者: 批量作业: 读卡器配置:请注意,数据源的连接数为20 min/max

  • 问题内容: 你好。我有一个实现runnable的类,并且有一个List,用于存储用该类的不同对象实例化的线程。给定运行线程对象的基础对象,如何访问基础对象的属性?这是一个例子: 问题答案: 我在文档中看不到任何方法。 那么,我最好的答案是您可能应该使用而不是(或在之上)使用。或者,也许您想要某种映射结构,以便可以从线程访问Runnable。(例如,)

  • 我正在尝试使用Spring Batch和Spring Task Scheduler运行两个作业,而不考虑它们的调度时间。这两个作业(Tasklet)在不同的时间间隔执行不同的作业。 以下是springConfig。xml文件: 以下是CouPonTougleActivationScheduler和OTPJobScheduler的实现: @enableSched调度公有类CouPonTougleAc

  • 当我使用“分裂流”并行运行spring批处理作业时,我发现spring批处理管理和命令行之间存在差异。 我有一个工作流如下: app-context.xml 但是在命令行中,与spring batch Admin有一些不同。 app-context.xml和命令行的作业配置如下: job1.xml app-context.xml 我很抱歉,因为我的问题太久了,谢谢你的帮助。

  • 我在Spring boot应用程序中有一个quartz调度作业,通过每5分钟激发一次的方法,将一个大列表中的项目发送到一些webservices。 我在下面的代码中尝试了一个,其池大小为5个线程。然而,当我执行并检查作业日志时,它说作业只需几秒钟就完成了,但发送所有数据需要几分钟。它继续正常工作,但工作似乎在几秒钟内完成。它可能表示在设置了所有线程之后作业就完成了。这是我避免的,因为我不知道作业执