Don't load BatchAutoConfiguration at all if there is no JobLauncher

Fixes gh-204
This commit is contained in:
Dave Syer 2014-01-09 17:50:03 +00:00
parent b1db714c23
commit 2377bd9ec9
2 changed files with 21 additions and 4 deletions

View File

@ -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();
}

View File

@ -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 {