Skip to content

Commit b105c8e

Browse files
committed
Replace usage of JobLauncher with JobOperator in JobStep
Resolves #4923
1 parent 0aae4e9 commit b105c8e

File tree

5 files changed

+43
-39
lines changed

5 files changed

+43
-39
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParserStepFactoryBean.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Map;
2424
import java.util.Set;
2525

26+
import org.springframework.batch.core.launch.JobOperator;
2627
import org.springframework.batch.core.listener.ChunkListener;
2728
import org.springframework.batch.core.listener.ItemProcessListener;
2829
import org.springframework.batch.core.listener.ItemReadListener;
@@ -33,7 +34,6 @@
3334
import org.springframework.batch.core.listener.StepExecutionListener;
3435
import org.springframework.batch.core.listener.StepListener;
3536
import org.springframework.batch.core.job.flow.Flow;
36-
import org.springframework.batch.core.launch.JobLauncher;
3737
import org.springframework.batch.core.partition.PartitionHandler;
3838
import org.springframework.batch.core.partition.Partitioner;
3939
import org.springframework.batch.core.partition.StepExecutionAggregator;
@@ -125,7 +125,7 @@ public class StepParserStepFactoryBean<I, O> implements FactoryBean<Step>, BeanN
125125
//
126126
private Job job;
127127

128-
private JobLauncher jobLauncher;
128+
private JobOperator jobOperator;
129129

130130
private JobParametersExtractor jobParametersExtractor;
131131

@@ -516,7 +516,7 @@ private Step createJobStep() throws Exception {
516516
JobStepBuilder builder = new StepBuilder(name, jobRepository).job(job);
517517
enhanceCommonStep(builder);
518518
builder.parametersExtractor(jobParametersExtractor);
519-
builder.launcher(jobLauncher);
519+
builder.operator(jobOperator);
520520
return builder.build();
521521

522522
}
@@ -656,8 +656,8 @@ public void setJobParametersExtractor(JobParametersExtractor jobParametersExtrac
656656
this.jobParametersExtractor = jobParametersExtractor;
657657
}
658658

659-
public void setJobLauncher(JobLauncher jobLauncher) {
660-
this.jobLauncher = jobLauncher;
659+
public void setJobOperator(JobOperator jobOperator) {
660+
this.jobOperator = jobOperator;
661661
}
662662

663663
// =========================================================

spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/JobStepBuilder.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2006-2022 the original author or authors.
2+
* Copyright 2006-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,10 +15,11 @@
1515
*/
1616
package org.springframework.batch.core.step.builder;
1717

18+
import org.springframework.batch.core.configuration.support.MapJobRegistry;
1819
import org.springframework.batch.core.job.Job;
20+
import org.springframework.batch.core.launch.JobOperator;
21+
import org.springframework.batch.core.launch.support.TaskExecutorJobOperator;
1922
import org.springframework.batch.core.step.Step;
20-
import org.springframework.batch.core.launch.JobLauncher;
21-
import org.springframework.batch.core.launch.support.TaskExecutorJobLauncher;
2223
import org.springframework.batch.core.step.job.JobParametersExtractor;
2324
import org.springframework.batch.core.step.job.JobStep;
2425

@@ -33,7 +34,7 @@ public class JobStepBuilder extends StepBuilderHelper<JobStepBuilder> {
3334

3435
private Job job;
3536

36-
private JobLauncher jobLauncher;
37+
private JobOperator jobOperator;
3738

3839
private JobParametersExtractor jobParametersExtractor;
3940

@@ -57,12 +58,12 @@ public JobStepBuilder job(Job job) {
5758
}
5859

5960
/**
60-
* Add a job launcher. Defaults to a simple job launcher.
61-
* @param jobLauncher the job launcher to use
61+
* Add a job operator. Defaults to a {@link TaskExecutorJobOperator}.
62+
* @param jobOperator the job operator to use
6263
* @return this for fluent chaining
6364
*/
64-
public JobStepBuilder launcher(JobLauncher jobLauncher) {
65-
this.jobLauncher = jobLauncher;
65+
public JobStepBuilder operator(JobOperator jobOperator) {
66+
this.jobOperator = jobOperator;
6667
return this;
6768
}
6869

@@ -92,18 +93,19 @@ public Step build() {
9293
if (jobParametersExtractor != null) {
9394
step.setJobParametersExtractor(jobParametersExtractor);
9495
}
95-
if (jobLauncher == null) {
96-
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
97-
jobLauncher.setJobRepository(getJobRepository());
96+
if (jobOperator == null) {
97+
TaskExecutorJobOperator jobOperator = new TaskExecutorJobOperator();
98+
jobOperator.setJobRepository(getJobRepository());
99+
jobOperator.setJobRegistry(new MapJobRegistry());
98100
try {
99-
jobLauncher.afterPropertiesSet();
101+
jobOperator.afterPropertiesSet();
100102
}
101103
catch (Exception e) {
102104
throw new StepBuilderException(e);
103105
}
104-
this.jobLauncher = jobLauncher;
106+
this.jobOperator = jobOperator;
105107
}
106-
step.setJobLauncher(jobLauncher);
108+
step.setJobOperator(jobOperator);
107109
try {
108110
step.afterPropertiesSet();
109111
}

spring-batch-core/src/main/java/org/springframework/batch/core/step/job/JobStep.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
import org.springframework.batch.core.job.Job;
2121
import org.springframework.batch.core.job.JobExecution;
2222
import org.springframework.batch.core.job.parameters.JobParameters;
23+
import org.springframework.batch.core.launch.JobOperator;
2324
import org.springframework.batch.core.step.Step;
2425
import org.springframework.batch.core.step.StepExecution;
2526
import org.springframework.batch.core.job.UnexpectedJobExecutionException;
26-
import org.springframework.batch.core.launch.JobLauncher;
2727
import org.springframework.batch.core.step.AbstractStep;
2828
import org.springframework.batch.item.ExecutionContext;
2929
import org.springframework.util.Assert;
@@ -47,14 +47,14 @@ public class JobStep extends AbstractStep {
4747

4848
private Job job;
4949

50-
private JobLauncher jobLauncher;
50+
private JobOperator jobOperator;
5151

5252
private JobParametersExtractor jobParametersExtractor = new DefaultJobParametersExtractor();
5353

5454
@Override
5555
public void afterPropertiesSet() throws Exception {
5656
super.afterPropertiesSet();
57-
Assert.state(jobLauncher != null, "A JobLauncher must be provided");
57+
Assert.state(jobOperator != null, "A JobOperator must be provided");
5858
Assert.state(job != null, "A Job must be provided");
5959
}
6060

@@ -67,11 +67,11 @@ public void setJob(Job job) {
6767
}
6868

6969
/**
70-
* A {@link JobLauncher} is required to be able to run the enclosed {@link Job}.
71-
* @param jobLauncher the {@link JobLauncher} to set
70+
* A {@link JobOperator} is required to be able to start the enclosed {@link Job}.
71+
* @param jobOperator the {@link JobOperator} to set
7272
*/
73-
public void setJobLauncher(JobLauncher jobLauncher) {
74-
this.jobLauncher = jobLauncher;
73+
public void setJobOperator(JobOperator jobOperator) {
74+
this.jobOperator = jobOperator;
7575
}
7676

7777
/**
@@ -86,7 +86,7 @@ public void setJobParametersExtractor(JobParametersExtractor jobParametersExtrac
8686
}
8787

8888
/**
89-
* Execute the job provided by delegating to the {@link JobLauncher} to prevent
89+
* Execute the job provided by delegating to the {@link JobOperator} to prevent
9090
* duplicate executions. The job parameters will be generated by the
9191
* {@link JobParametersExtractor} provided (if any), otherwise empty. On a restart,
9292
* the job parameters will be the same as the last (failed) execution.
@@ -109,7 +109,7 @@ protected void doExecute(StepExecution stepExecution) throws Exception {
109109
executionContext.put(JOB_PARAMETERS_KEY, jobParameters);
110110
}
111111

112-
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
112+
JobExecution jobExecution = jobOperator.start(job, jobParameters);
113113

114114
stepExecution.setExitStatus(determineStepExitStatus(stepExecution, jobExecution));
115115

spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch.xsd

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -446,14 +446,14 @@
446446
</xsd:appinfo>
447447
</xsd:annotation>
448448
</xsd:attribute>
449-
<xsd:attribute name="job-launcher">
449+
<xsd:attribute name="job-operator">
450450
<xsd:annotation>
451-
<xsd:documentation source="java:org.springframework.batch.core.launch.JobLauncher"><![CDATA[
451+
<xsd:documentation source="java:org.springframework.batch.core.launch.JobOperator"><![CDATA[
452452
The job that will execute in this step.
453453
]]></xsd:documentation>
454454
<xsd:appinfo>
455455
<tool:annotation kind="ref">
456-
<tool:expected-type type="java:org.springframework.batch.core.launch.JobLauncher" />
456+
<tool:expected-type type="java:org.springframework.batch.core.launch.JobOperator" />
457457
</tool:annotation>
458458
</xsd:appinfo>
459459
</xsd:annotation>

spring-batch-core/src/test/java/org/springframework/batch/core/step/job/JobStepTests.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2006-2022 the original author or authors.
2+
* Copyright 2006-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -22,12 +22,13 @@
2222

2323
import org.springframework.batch.core.BatchStatus;
2424
import org.springframework.batch.core.ExitStatus;
25+
import org.springframework.batch.core.configuration.support.MapJobRegistry;
2526
import org.springframework.batch.core.job.JobExecution;
2627
import org.springframework.batch.core.job.parameters.JobParameters;
28+
import org.springframework.batch.core.launch.support.TaskExecutorJobOperator;
2729
import org.springframework.batch.core.step.StepExecution;
2830
import org.springframework.batch.core.job.UnexpectedJobExecutionException;
2931
import org.springframework.batch.core.job.JobSupport;
30-
import org.springframework.batch.core.launch.support.TaskExecutorJobLauncher;
3132
import org.springframework.batch.core.repository.JobRepository;
3233
import org.springframework.batch.core.repository.support.JdbcJobRepositoryFactoryBean;
3334
import org.springframework.batch.item.ExecutionContext;
@@ -68,10 +69,11 @@ void setUp() throws Exception {
6869
JobExecution jobExecution = jobRepository.createJobExecution("job", new JobParameters());
6970
stepExecution = jobExecution.createStepExecution("step");
7071
jobRepository.add(stepExecution);
71-
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
72-
jobLauncher.setJobRepository(jobRepository);
73-
jobLauncher.afterPropertiesSet();
74-
step.setJobLauncher(jobLauncher);
72+
TaskExecutorJobOperator jobOperator = new TaskExecutorJobOperator();
73+
jobOperator.setJobRepository(jobRepository);
74+
jobOperator.setJobRegistry(new MapJobRegistry());
75+
jobOperator.afterPropertiesSet();
76+
step.setJobOperator(jobOperator);
7577
}
7678

7779
@Test
@@ -80,9 +82,9 @@ void testAfterPropertiesSet() {
8082
}
8183

8284
@Test
83-
void testAfterPropertiesSetWithNoLauncher() {
85+
void testAfterPropertiesSetWithNoOperator() {
8486
step.setJob(new JobSupport("child"));
85-
step.setJobLauncher(null);
87+
step.setJobOperator(null);
8688
assertThrows(IllegalStateException.class, step::afterPropertiesSet);
8789
}
8890

0 commit comments

Comments
 (0)