diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.java index 83c65f31dd8..8df8b67c22d 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.java @@ -54,6 +54,7 @@ import org.springframework.util.StringUtils; @Configuration @ConditionalOnClass({ JobLauncher.class, DataSource.class, JdbcOperations.class }) @AutoConfigureAfter(HibernateJpaAutoConfiguration.class) +@ConditionalOnBean(JobLauncher.class) public class BatchAutoConfiguration { @Value("${spring.batch.job.name:}") @@ -70,7 +71,6 @@ public class BatchAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnBean(JobLauncher.class) @ConditionalOnExpression("${spring.batch.job.enabled:true}") public JobLauncherCommandLineRunner jobLauncherCommandLineRunner() { JobLauncherCommandLineRunner runner = new JobLauncherCommandLineRunner(); @@ -82,7 +82,6 @@ public class BatchAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnBean(JobLauncher.class) public ExitCodeGenerator jobExecutionExitCodeGenerator() { return new JobExecutionExitCodeGenerator(); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfigurationTests.java index 6ce880e3c36..14867646707 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfigurationTests.java @@ -48,6 +48,7 @@ import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.transaction.PlatformTransactionManager; @@ -89,6 +90,17 @@ public class BatchAutoConfigurationTests { .queryForList("select * from BATCH_JOB_EXECUTION").size()); } + @Test + public void testNoBatchConfiguration() throws Exception { + this.context = new AnnotationConfigApplicationContext(); + this.context.register(EmptyConfiguration.class, BatchAutoConfiguration.class, + EmbeddedDataSourceConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + this.context.refresh(); + assertEquals(0, this.context.getBeanNamesForType(JobLauncher.class).length); + assertEquals(0, this.context.getBeanNamesForType(JobRepository.class).length); + } + @Test public void testDefinesAndLaunchesJob() throws Exception { this.context = new AnnotationConfigApplicationContext(); @@ -105,7 +117,8 @@ public class BatchAutoConfigurationTests { @Test public void testDisableLaunchesJob() throws Exception { this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, "spring.batch.job.enabled:false"); + EnvironmentTestUtils.addEnvironment(this.context, + "spring.batch.job.enabled:false"); this.context.register(JobConfiguration.class, BatchAutoConfiguration.class, EmbeddedDataSourceConfiguration.class, PropertyPlaceholderAutoConfiguration.class); @@ -117,7 +130,8 @@ public class BatchAutoConfigurationTests { @Test public void testDisableSchemaLoader() throws Exception { this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.name:batchtest", + EnvironmentTestUtils.addEnvironment(this.context, + "spring.datasource.name:batchtest", "spring.batch.initializer.enabled:false"); this.context.register(TestConfiguration.class, BatchAutoConfiguration.class, EmbeddedDataSourceConfiguration.class, @@ -149,6 +163,10 @@ public class BatchAutoConfigurationTests { new JobParameters())); } + @Configuration + protected static class EmptyConfiguration { + } + @EnableBatchProcessing @ComponentScan(basePackageClasses = City.class) protected static class TestConfiguration {