Skip to content

Commit 8489ac5

Browse files
committed
Support user-defined ExecutionContextSerializer in BatchAutoConfiguration
1 parent d172b22 commit 8489ac5

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-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
@@ -24,6 +24,7 @@
2424
import org.springframework.batch.core.configuration.support.DefaultBatchConfiguration;
2525
import org.springframework.batch.core.explore.JobExplorer;
2626
import org.springframework.batch.core.launch.JobLauncher;
27+
import org.springframework.batch.core.repository.ExecutionContextSerializer;
2728
import org.springframework.batch.core.repository.JobRepository;
2829
import org.springframework.beans.factory.ObjectProvider;
2930
import org.springframework.boot.ExitCodeGenerator;
@@ -62,6 +63,7 @@
6263
* @author Eddú Meléndez
6364
* @author Kazuki Shimizu
6465
* @author Mahmoud Ben Hassine
66+
* @author Sanghyuk Jung
6567
* @since 1.0.0
6668
*/
6769
@AutoConfiguration(after = { HibernateJpaAutoConfiguration.class, TransactionAutoConfiguration.class })
@@ -102,13 +104,17 @@ static class SpringBootBatchConfiguration extends DefaultBatchConfiguration {
102104

103105
private final List<BatchConversionServiceCustomizer> batchConversionServiceCustomizers;
104106

107+
private final ExecutionContextSerializer serializer;
108+
105109
SpringBootBatchConfiguration(DataSource dataSource, @BatchDataSource ObjectProvider<DataSource> batchDataSource,
106110
PlatformTransactionManager transactionManager, BatchProperties properties,
107-
ObjectProvider<BatchConversionServiceCustomizer> batchConversionServiceCustomizers) {
111+
ObjectProvider<BatchConversionServiceCustomizer> batchConversionServiceCustomizers,
112+
ObjectProvider<ExecutionContextSerializer> executionContextSerializer) {
108113
this.dataSource = batchDataSource.getIfAvailable(() -> dataSource);
109114
this.transactionManager = transactionManager;
110115
this.properties = properties;
111116
this.batchConversionServiceCustomizers = batchConversionServiceCustomizers.orderedStream().toList();
117+
this.serializer = executionContextSerializer.getIfAvailable(super::getExecutionContextSerializer);
112118
}
113119

114120
@Override
@@ -133,6 +139,11 @@ protected Isolation getIsolationLevelForCreate() {
133139
return (isolation != null) ? isolation : super.getIsolationLevelForCreate();
134140
}
135141

142+
@Override
143+
protected ExecutionContextSerializer getExecutionContextSerializer() {
144+
return this.serializer;
145+
}
146+
136147
@Override
137148
protected ConfigurableConversionService getConversionService() {
138149
ConfigurableConversionService conversionService = super.getConversionService();

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.springframework.batch.core.job.AbstractJob;
4444
import org.springframework.batch.core.launch.JobLauncher;
4545
import org.springframework.batch.core.launch.JobOperator;
46+
import org.springframework.batch.core.repository.ExecutionContextSerializer;
4647
import org.springframework.batch.core.repository.JobRepository;
4748
import org.springframework.beans.BeansException;
4849
import org.springframework.beans.factory.annotation.Autowired;
@@ -430,6 +431,17 @@ void conversionServiceCustomizersAreCalled() {
430431
});
431432
}
432433

434+
@Test
435+
void whenTheUserDefinesCustomExecutionContextSerializer() {
436+
this.contextRunner.withUserConfiguration(TestConfiguration.class, EmbeddedDataSourceConfiguration.class)
437+
.withUserConfiguration(ExecutionContextConfiguration.class)
438+
.run((context) -> {
439+
ExecutionContextSerializer serializer = context.getBean(ExecutionContextSerializer.class);
440+
SpringBootBatchConfiguration batchConfiguration = context.getBean(SpringBootBatchConfiguration.class);
441+
assertThat(serializer).isEqualTo(batchConfiguration.getExecutionContextSerializer());
442+
});
443+
}
444+
433445
@Test
434446
void whenTheUserDefinesAJobNameAsJobInstanceValidates() {
435447
JobLauncherApplicationRunner runner = createInstance("another");
@@ -777,4 +789,14 @@ BatchConversionServiceCustomizer anotherBatchConversionServiceCustomizer() {
777789

778790
}
779791

792+
@Configuration(proxyBeanMethods = false)
793+
static class ExecutionContextConfiguration {
794+
795+
@Bean
796+
ExecutionContextSerializer executionContextSerializer() {
797+
return mock(ExecutionContextSerializer.class);
798+
}
799+
800+
}
801+
780802
}

0 commit comments

Comments
 (0)