Browse Source

Add `@ConditionalOnMissingBean` for `JobRepository`

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

Fixes gh-43236
pull/43249/head
Phillip Webb 1 year ago
parent
commit
73fc351d71
  1. 8
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.java
  2. 21
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfigurationTests.java

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

@ -20,6 +20,7 @@ import java.util.List; @@ -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 { @@ -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;

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

@ -517,6 +517,13 @@ class BatchAutoConfigurationTests { @@ -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 { @@ -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 { @@ -880,4 +897,8 @@ class BatchAutoConfigurationTests {
}
interface TestJobRepository extends JobRepository {
}
}

Loading…
Cancel
Save