我目前正在构建一个spring批处理应用程序,其中执行了几个步骤。除了一个,所有的步骤都是简单的tasklet(没有读取器或写入器),它们负责各种任务,如复制文件、发送请求、启动批处理(*.bat)文件等。
大多数步骤应该是串行执行的。在一个特定的步骤中,我希望启动X*.bat
文件,这些文件最多可以有Y个实例。
如果1==true
:)我想我必须使用taskExecutor,下面我有一个示例,在这里我开始第一步(假设必须找出X是多少),然后我有一个flowParallel(简单地说,如果有更多的批处理,请再次开始该步骤),然后我进行了一个拆分,以允许并行执行(目前只有3个步骤,当然我可以用一个限制“taskExecutor.setmaxpoolsize”的循环添加所有的X,我觉得这很愚蠢)
Flow flowInit = new FlowBuilder<Flow>("flowInit")
.from(stepS1)
.end();
Flow flowParallel = new FlowBuilder<Flow>("flowParallel")
.start(stepS1Parallel)
.next(deciderOne)
.on("thereAreMoreBatchesToExecute")
.to(stepS1Parallel).end();
final Flow splitFlow = new FlowBuilder<Flow>("splitFlow")
.start(flowParallel)
.split(new SimpleAsyncTaskExecutor())
.add(flowParallel, flowParallel, flowParallel)
.build();
return jobs.get("dataLoadParallel")
.start(flowInit)
.next(splitFlow)
.next(stepS1)
.end().build();
那么,我做错了什么?我该走哪条路?
如果希望tu设置最大并发量,则必须使用SimpleAsyncTaskExecutor的setConcurrencyLimit方法。
如果希望几个步骤并行运行,则需要为每个步骤实例化唯一的步骤和唯一的流。在上面的示例中,在流(flowParallel)的同一个实例中并行地启动一个步骤(stepS1Parallel)的同一个实例。这意味着,一个步骤的同一个实例是用多个线程调用的,这肯定会把事情搞砸。
因此,您需要有一个循环,在这个循环中,为您想要处理的每个*.bat文件创建一个步骤的实例和一个流的实例。
HTH
当我使用Spring批处理管理运行长时间运行的批处理作业的多个实例时,它会在达到jobLauncher线程池任务执行程序池大小后阻止其他作业运行。但是从cron中提取多个工作似乎效果不错。下面是作业启动器配置。 Spring批处理管理员Restful API是否使用不同于xml配置中指定的作业启动器?
我有一个作业流,我希望以以下方式运行它: 作业流将从Job1开始。在Job1成功完成后,Job1将同时启动Job2和Job4。 Job2和Job4将并行运行。 在Job2成功完成后,Job2将启动Job3。 在Job4成功完成后,Job4将启动Job5。 下面是job1.xml和job1的作业启动器类的代码片段: job1.xml uijobLauncher.java “job2,Job3”对和“
我是Spring批处理的新手,我只想问如何从多行结果集中检索数据。我有以下场景: > 有两个不同的表说员工 使用时,我只能创建一个工资单子级,但该表可能有多个子级。请帮助...
我在我的项目中集成了Spring Batch,我在运行JobLauncher时遇到了问题。 在我的类JobLauncher我有这个: 对于配置,我使用XML配置: 配置批处理。xml: 在作业配置中。我有: 当我在类JobLauncher中调试时,它会在jobLuancher中停止。运行,我也不例外,似乎SpringBatch无法识别reader和whriter!!有什么建议吗?
考虑一个阶跃豆: 要求:在Reader中,它从文件中读取(Entity1的)记录。在处理器中,它进行处理,在Writer中,它写入数据库。 在TaskExecutor之前,只创建了一个线程,它将在读取器和处理器中循环1000次,如上面的块设置中所定义的。然后它将移动到writer并写入所有1000条记录。它将再次从记录编号1001开始,然后在读取器和处理器中处理另外1000条记录。这是一个同步执行
我在BatchScheduler中有多个计划作业,它在特定时间运行。简单的内置JobLauncher,这是同步的。在自然界中最初使用。现在,我想并行运行这些作业,这样没有作业可以等待其他作业完成。 我在不同的作业上尝试过@Async注释,但都不起作用。 然后,我尝试设置joblauncher.settaskexecutor(新的SimpleAsyncTaskExecutor())。但这并不奏效。