Skip to content

Commit 4ff0061

Browse files
committed
Merge pull request #44799 from quaff
* gh-44799: Auto-configu Batch to use JobsParametersConverter bean when available Closes gh-44799
2 parents 84fbf43 + 7af7820 commit 4ff0061

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
2424
import org.springframework.batch.core.configuration.support.DefaultBatchConfiguration;
25+
import org.springframework.batch.core.converter.JobParametersConverter;
2526
import org.springframework.batch.core.explore.JobExplorer;
2627
import org.springframework.batch.core.launch.JobLauncher;
2728
import org.springframework.batch.core.repository.ExecutionContextSerializer;
@@ -111,18 +112,22 @@ static class SpringBootBatchConfiguration extends DefaultBatchConfiguration {
111112

112113
private final ExecutionContextSerializer executionContextSerializer;
113114

115+
private final JobParametersConverter jobParametersConverter;
116+
114117
SpringBootBatchConfiguration(DataSource dataSource, @BatchDataSource ObjectProvider<DataSource> batchDataSource,
115118
PlatformTransactionManager transactionManager,
116119
@BatchTransactionManager ObjectProvider<PlatformTransactionManager> batchTransactionManager,
117120
@BatchTaskExecutor ObjectProvider<TaskExecutor> batchTaskExecutor, BatchProperties properties,
118121
ObjectProvider<BatchConversionServiceCustomizer> batchConversionServiceCustomizers,
119-
ObjectProvider<ExecutionContextSerializer> executionContextSerializer) {
122+
ObjectProvider<ExecutionContextSerializer> executionContextSerializer,
123+
ObjectProvider<JobParametersConverter> jobParametersConverter) {
120124
this.dataSource = batchDataSource.getIfAvailable(() -> dataSource);
121125
this.transactionManager = batchTransactionManager.getIfAvailable(() -> transactionManager);
122126
this.taskExector = batchTaskExecutor.getIfAvailable();
123127
this.properties = properties;
124128
this.batchConversionServiceCustomizers = batchConversionServiceCustomizers.orderedStream().toList();
125129
this.executionContextSerializer = executionContextSerializer.getIfAvailable();
130+
this.jobParametersConverter = jobParametersConverter.getIfAvailable();
126131
}
127132

128133
@Override
@@ -167,6 +172,12 @@ protected ExecutionContextSerializer getExecutionContextSerializer() {
167172
: super.getExecutionContextSerializer();
168173
}
169174

175+
@Override
176+
protected JobParametersConverter getJobParametersConverter() {
177+
return (this.jobParametersConverter != null) ? this.jobParametersConverter
178+
: super.getJobParametersConverter();
179+
}
180+
170181
@Override
171182
protected TaskExecutor getTaskExecutor() {
172183
return (this.taskExector != null) ? this.taskExector : super.getTaskExecutor();

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfigurationTests.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
import org.springframework.batch.core.configuration.JobRegistry;
4040
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
4141
import org.springframework.batch.core.configuration.support.DefaultBatchConfiguration;
42+
import org.springframework.batch.core.converter.DefaultJobParametersConverter;
43+
import org.springframework.batch.core.converter.JobParametersConverter;
44+
import org.springframework.batch.core.converter.JsonJobParametersConverter;
4245
import org.springframework.batch.core.explore.JobExplorer;
4346
import org.springframework.batch.core.job.AbstractJob;
4447
import org.springframework.batch.core.launch.JobLauncher;
@@ -532,6 +535,28 @@ void customJdbcPropertiesIsUsed() {
532535
assertThat(configuration.getValidateTransactionState()).isEqualTo(false);
533536
assertThat(configuration.getIsolationLevelForCreate()).isEqualTo(Isolation.READ_COMMITTED);
534537
});
538+
539+
}
540+
541+
@Test
542+
void customJobParametersConverterIsUsed() {
543+
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
544+
.withBean(JobParametersConverter.class, JsonJobParametersConverter::new)
545+
.withPropertyValues("spring.datasource.generate-unique-name=true")
546+
.run((context) -> {
547+
assertThat(context).hasSingleBean(JsonJobParametersConverter.class);
548+
assertThat(context.getBean(SpringBootBatchConfiguration.class).getJobParametersConverter())
549+
.isInstanceOf(JsonJobParametersConverter.class);
550+
});
551+
}
552+
553+
@Test
554+
void defaultJobParametersConverterIsUsed() {
555+
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class).run((context) -> {
556+
assertThat(context).doesNotHaveBean(JobParametersConverter.class);
557+
assertThat(context.getBean(SpringBootBatchConfiguration.class).getJobParametersConverter())
558+
.isInstanceOf(DefaultJobParametersConverter.class);
559+
});
535560
}
536561

537562
private JobLauncherApplicationRunner createInstance(String... registeredJobNames) {

0 commit comments

Comments
 (0)