Add `@ConditionalOnMissingBean` for `JobRepository`

Update `BatchAutoConfiguration` so that the `JobRepository` is not
defined when the user provides an appropriate bean.

Fixes gh-43236
This commit is contained in:
Phillip Webb 2024-11-20 21:57:52 -08:00
parent 3cae5c27d1
commit 73fc351d71
2 changed files with 29 additions and 0 deletions

View File

@ -20,6 +20,7 @@ import java.util.List;
import javax.sql.DataSource;
import org.springframework.batch.core.configuration.BatchConfigurationException;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.support.DefaultBatchConfiguration;
import org.springframework.batch.core.explore.JobExplorer;
@ -129,6 +130,13 @@ public class BatchAutoConfiguration {
return this.dataSource;
}
@Bean
@ConditionalOnMissingBean
@Override
public JobRepository jobRepository() throws BatchConfigurationException {
return super.jobRepository();
}
@Override
protected PlatformTransactionManager getTransactionManager() {
return this.transactionManager;

View File

@ -517,6 +517,13 @@ class BatchAutoConfigurationTests {
});
}
@Test
void defaultJobRepositoryIsNotCreatedWhenUserDefinedJobRepositoryBean() {
this.contextRunner
.withUserConfiguration(TestConfigurationWithJobRepository.class, EmbeddedDataSourceConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(TestJobRepository.class));
}
private JobLauncherApplicationRunner createInstance(String... registeredJobNames) {
JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(mock(JobLauncher.class),
mock(JobExplorer.class), mock(JobRepository.class));
@ -596,6 +603,16 @@ class BatchAutoConfigurationTests {
}
@TestAutoConfigurationPackage(City.class)
static class TestConfigurationWithJobRepository {
@Bean
TestJobRepository jobRepository() {
return mock(TestJobRepository.class);
}
}
@Configuration(proxyBeanMethods = false)
static class EntityManagerFactoryConfiguration {
@ -880,4 +897,8 @@ class BatchAutoConfigurationTests {
}
interface TestJobRepository extends JobRepository {
}
}