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 f8b47a5443..69cb9bbe5e 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 @@ -75,11 +75,11 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class BatchAutoConfigurationTests { - private AnnotationConfigApplicationContext context; - @Rule public ExpectedException expected = ExpectedException.none(); + private AnnotationConfigApplicationContext context; + @After public void close() { if (this.context != null) { @@ -89,12 +89,8 @@ public class BatchAutoConfigurationTests { @Test public void testDefaultContext() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - this.context.register(TestConfiguration.class, - EmbeddedDataSourceConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load(new Class[] { TestConfiguration.class, + EmbeddedDataSourceConfiguration.class }); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); assertThat(this.context.getBean(JobExplorer.class)).isNotNull(); assertThat( @@ -106,11 +102,7 @@ public class BatchAutoConfigurationTests { @Test public void testNoDatabase() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - this.context.register(TestCustomConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load(new Class[] { TestCustomConfiguration.class }); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); JobExplorer explorer = this.context.getBean(JobExplorer.class); assertThat(explorer).isNotNull(); @@ -119,11 +111,8 @@ public class BatchAutoConfigurationTests { @Test public void testNoBatchConfiguration() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - this.context.register(EmptyConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, EmbeddedDataSourceConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load(new Class[] { EmptyConfiguration.class, + EmbeddedDataSourceConfiguration.class }); assertThat(this.context.getBeanNamesForType(JobLauncher.class).length) .isEqualTo(0); assertThat(this.context.getBeanNamesForType(JobRepository.class).length) @@ -132,12 +121,8 @@ public class BatchAutoConfigurationTests { @Test public void testDefinesAndLaunchesJob() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - this.context.register(JobConfiguration.class, - EmbeddedDataSourceConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load(new Class[] { JobConfiguration.class, + EmbeddedDataSourceConfiguration.class }); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); this.context.getBean(JobLauncherCommandLineRunner.class).run(); assertThat(this.context.getBean(JobRepository.class).getLastJobExecution("job", @@ -146,14 +131,9 @@ public class BatchAutoConfigurationTests { @Test public void testDefinesAndLaunchesNamedJob() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, + load(new Class[] { NamedJobConfigurationWithRegisteredJob.class, + EmbeddedDataSourceConfiguration.class }, "spring.batch.job.names:discreteRegisteredJob"); - this.context.register(NamedJobConfigurationWithRegisteredJob.class, - EmbeddedDataSourceConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); JobRepository repository = this.context.getBean(JobRepository.class); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); this.context.getBean(JobLauncherCommandLineRunner.class).run(); @@ -163,31 +143,21 @@ public class BatchAutoConfigurationTests { @Test public void testDefinesAndLaunchesLocalJob() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, + load(new Class[] { NamedJobConfigurationWithLocalJob.class, + EmbeddedDataSourceConfiguration.class }, "spring.batch.job.names:discreteLocalJob"); - this.context.register(NamedJobConfigurationWithLocalJob.class, - EmbeddedDataSourceConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); this.context.getBean(JobLauncherCommandLineRunner.class).run(); assertThat(this.context.getBean(JobRepository.class) .getLastJobExecution("discreteLocalJob", new JobParameters())) - .isNotNull(); + .isNotNull(); } @Test public void testDisableLaunchesJob() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, + load(new Class[] { JobConfiguration.class, + EmbeddedDataSourceConfiguration.class }, "spring.batch.job.enabled:false"); - this.context.register(JobConfiguration.class, - EmbeddedDataSourceConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); assertThat(this.context.getBeanNamesForType(CommandLineRunner.class).length) .isEqualTo(0); @@ -195,19 +165,14 @@ public class BatchAutoConfigurationTests { @Test public void testDisableSchemaLoader() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, - "spring.datasource.name:batchtest", + load(new Class[] { TestConfiguration.class, + EmbeddedDataSourceConfiguration.class }, + "spring.datasource.generate-unique-name=true", "spring.batch.initializer.enabled:false"); - this.context.register(TestConfiguration.class, - EmbeddedDataSourceConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); assertThat( this.context.getBean(BatchProperties.class).getInitializer().isEnabled()) - .isFalse(); + .isFalse(); this.expected.expect(BadSqlGrammarException.class); new JdbcTemplate(this.context.getBean(DataSource.class)) .queryForList("select * from BATCH_JOB_EXECUTION"); @@ -215,14 +180,9 @@ public class BatchAutoConfigurationTests { @Test public void testUsingJpa() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - // The order is very important here: DataSource -> Hibernate -> Batch - this.context.register(TestConfiguration.class, + load(new Class[] { TestConfiguration.class, EmbeddedDataSourceConfiguration.class, - HibernateJpaAutoConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + HibernateJpaAutoConfiguration.class }); PlatformTransactionManager transactionManager = this.context .getBean(PlatformTransactionManager.class); // It's a lazy proxy, but it does render its target if you ask for toString(): @@ -236,17 +196,12 @@ public class BatchAutoConfigurationTests { @Test public void testRenamePrefix() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, - "spring.datasource.name:batchtest", + load(new Class[] { TestConfiguration.class, + EmbeddedDataSourceConfiguration.class, + HibernateJpaAutoConfiguration.class }, + "spring.datasource.generate-unique-name=true", "spring.batch.schema:classpath:batch/custom-schema-hsql.sql", "spring.batch.tablePrefix:PREFIX_"); - this.context.register(TestConfiguration.class, - EmbeddedDataSourceConfiguration.class, - HibernateJpaAutoConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); assertThat( this.context.getBean(BatchProperties.class).getInitializer().isEnabled()) @@ -263,19 +218,15 @@ public class BatchAutoConfigurationTests { @Test public void testCustomTablePrefixWithDefaultSchemaDisablesInitializer() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, - "spring.datasource.name:batchtest", "spring.batch.tablePrefix:PREFIX_"); - this.context.register(TestConfiguration.class, - EmbeddedDataSourceConfiguration.class, - HibernateJpaAutoConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); + load(new Class[] { TestConfiguration.class, + EmbeddedDataSourceConfiguration.class, + HibernateJpaAutoConfiguration.class }, + "spring.datasource.generate-unique-name=true", + "spring.batch.tablePrefix:PREFIX_"); assertThat(this.context.getBean(JobLauncher.class)).isNotNull(); assertThat( this.context.getBean(BatchProperties.class).getInitializer().isEnabled()) - .isFalse(); + .isFalse(); this.expected.expect(BadSqlGrammarException.class); new JdbcTemplate(this.context.getBean(DataSource.class)) .queryForList("select * from BATCH_JOB_EXECUTION"); @@ -283,16 +234,11 @@ public class BatchAutoConfigurationTests { @Test public void testCustomizeJpaTransactionManagerUsingProperties() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, + load(new Class[] { TestConfiguration.class, + EmbeddedDataSourceConfiguration.class, + HibernateJpaAutoConfiguration.class }, "spring.transaction.default-timeout:30", "spring.transaction.rollback-on-commit-failure:true"); - this.context.register(TestConfiguration.class, - EmbeddedDataSourceConfiguration.class, - HibernateJpaAutoConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); this.context.getBean(BatchConfigurer.class); JpaTransactionManager transactionManager = JpaTransactionManager.class.cast( this.context.getBean(BatchConfigurer.class).getTransactionManager()); @@ -303,15 +249,10 @@ public class BatchAutoConfigurationTests { @Test public void testCustomizeDataSourceTransactionManagerUsingProperties() throws Exception { - this.context = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(this.context, + load(new Class[] { TestConfiguration.class, + EmbeddedDataSourceConfiguration.class }, "spring.transaction.default-timeout:30", "spring.transaction.rollback-on-commit-failure:true"); - this.context.register(TestConfiguration.class, - EmbeddedDataSourceConfiguration.class, BatchAutoConfiguration.class, - TransactionAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class); - this.context.refresh(); this.context.getBean(BatchConfigurer.class); DataSourceTransactionManager transactionManager = DataSourceTransactionManager.class .cast(this.context.getBean(BatchConfigurer.class) @@ -320,6 +261,18 @@ public class BatchAutoConfigurationTests { assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue(); } + private void load(Class[] configs, String... environment) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + EnvironmentTestUtils.addEnvironment(ctx, environment); + if (configs != null) { + ctx.register(configs); + } + ctx.register(BatchAutoConfiguration.class, TransactionAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + ctx.refresh(); + this.context = ctx; + } + @Configuration protected static class EmptyConfiguration {