diff --git a/spring-cloud-starter-single-step-batch-job/src/main/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfiguration.java b/spring-cloud-starter-single-step-batch-job/src/main/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfiguration.java index fc574f7b..27527a2d 100644 --- a/spring-cloud-starter-single-step-batch-job/src/main/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfiguration.java +++ b/spring-cloud-starter-single-step-batch-job/src/main/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfiguration.java @@ -35,6 +35,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; import org.springframework.util.Assert; /** @@ -54,6 +55,9 @@ public class SingleStepJobAutoConfiguration { private SingleStepJobProperties properties; + @Autowired + PlatformTransactionManager transactionManager; + @Autowired(required = false) private ItemProcessor, Map> itemProcessor; @@ -85,7 +89,7 @@ public class SingleStepJobAutoConfiguration { stepBuilder.processor(this.itemProcessor); - Step step = stepBuilder.writer(itemWriter).build(); + Step step = stepBuilder.writer(itemWriter).transactionManager(this.transactionManager).build(); return this.jobBuilderFactory.get(this.properties.getJobName()).start(step).build(); } diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfigurationTests.java index 1d534ef4..079226e6 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/SingleStepJobAutoConfigurationTests.java @@ -31,6 +31,7 @@ import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.item.support.ListItemWriter; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -38,6 +39,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -156,6 +158,11 @@ public class SingleStepJobAutoConfigurationTests { @Configuration public static class SimpleConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { List> items = new ArrayList<>(3); diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemReaderAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemReaderAutoConfigurationTests.java index c276e2ac..3b479ac6 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemReaderAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemReaderAutoConfigurationTests.java @@ -36,6 +36,7 @@ import org.springframework.batch.item.file.separator.RecordSeparatorPolicy; import org.springframework.batch.item.file.transform.DefaultFieldSet; import org.springframework.batch.item.file.transform.LineTokenizer; import org.springframework.batch.item.support.ListItemWriter; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -45,6 +46,7 @@ import org.springframework.cloud.task.batch.autoconfigure.RangeConverter; import org.springframework.cloud.task.batch.autoconfigure.SingleStepJobAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; @@ -306,6 +308,11 @@ public class FlatFileItemReaderAutoConfigurationTests { @Configuration public static class CustomMappingConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemWriter> itemWriter() { return new ListItemWriter<>(); @@ -328,6 +335,11 @@ public class FlatFileItemReaderAutoConfigurationTests { @Configuration public static class JobConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemWriter> itemWriter() { return new ListItemWriter<>(); @@ -339,6 +351,11 @@ public class FlatFileItemReaderAutoConfigurationTests { @Configuration public static class RecordSeparatorAndSkippedLinesJobConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public RecordSeparatorPolicy recordSeparatorPolicy() { return new RecordSeparatorPolicy() { @@ -384,6 +401,11 @@ public class FlatFileItemReaderAutoConfigurationTests { @Configuration public static class CustomLineMapperConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public LineMapper> lineMapper() { return (line, lineNumber) -> { diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemWriterAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemWriterAutoConfigurationTests.java index b2c500ab..8e3b09c1 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemWriterAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/flatfile/FlatFileItemWriterAutoConfigurationTests.java @@ -40,6 +40,7 @@ import org.springframework.batch.item.file.transform.FieldExtractor; import org.springframework.batch.item.file.transform.LineAggregator; import org.springframework.batch.item.file.transform.PassThroughLineAggregator; import org.springframework.batch.item.support.ListItemReader; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.batch.test.AssertFile; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; @@ -52,6 +53,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.transaction.PlatformTransactionManager; import org.springframework.util.FileCopyUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -362,6 +364,11 @@ public class FlatFileItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class DelimitedJobConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { @@ -380,6 +387,11 @@ public class FlatFileItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class LineAggregatorConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { @@ -403,6 +415,11 @@ public class FlatFileItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class HeaderFooterConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { @@ -431,6 +448,11 @@ public class FlatFileItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class FieldExtractorConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { @@ -459,6 +481,11 @@ public class FlatFileItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class FormattedJobConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { @@ -477,6 +504,11 @@ public class FlatFileItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class FormattedFieldExtractorJobConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public FieldExtractor> lineAggregator() { return item -> { diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcBatchItemWriterAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcBatchItemWriterAutoConfigurationTests.java index 54bf2b62..0e4d3b4c 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcBatchItemWriterAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcBatchItemWriterAutoConfigurationTests.java @@ -40,6 +40,7 @@ import org.springframework.batch.item.database.ItemPreparedStatementSetter; import org.springframework.batch.item.database.ItemSqlParameterSourceProvider; import org.springframework.batch.item.database.JdbcBatchItemWriter; import org.springframework.batch.item.support.ListItemReader; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; @@ -58,6 +59,7 @@ import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -263,6 +265,11 @@ public class JdbcBatchItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class DelimitedJobConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { @@ -281,6 +288,11 @@ public class JdbcBatchItemWriterAutoConfigurationTests { @EnableBatchProcessing public static class DelimitedDifferentKeyNameJobConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcCursorItemReaderAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcCursorItemReaderAutoConfigurationTests.java index 19977cc5..6cddfa51 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcCursorItemReaderAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/jdbc/JdbcCursorItemReaderAutoConfigurationTests.java @@ -36,6 +36,7 @@ import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.item.database.JdbcCursorItemReader; import org.springframework.batch.item.support.ListItemWriter; import org.springframework.batch.item.util.ExecutionContextUserSupport; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.AutoConfigureBefore; @@ -52,6 +53,7 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -301,6 +303,11 @@ public class JdbcCursorItemReaderAutoConfigurationTests { @Configuration public static class TaskLauncherConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + private static Server defaultServer; @Bean diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemReaderAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemReaderAutoConfigurationTests.java index bbc7c81c..058f763b 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemReaderAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemReaderAutoConfigurationTests.java @@ -36,6 +36,7 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.item.support.ListItemWriter; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -50,6 +51,7 @@ import org.springframework.kafka.support.serializer.JsonSerializer; import org.springframework.kafka.test.EmbeddedKafkaBroker; import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; @@ -216,6 +218,11 @@ public class KafkaItemReaderAutoConfigurationTests { @Configuration public static class CustomMappingConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemWriter> itemWriter() { return new ListItemWriter<>(); diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemWriterTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemWriterTests.java index 57f8f34d..c32424ed 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemWriterTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/kafka/KafkaItemWriterTests.java @@ -25,6 +25,7 @@ import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.common.serialization.StringDeserializer; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; @@ -33,6 +34,7 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.item.support.ListItemReader; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -47,6 +49,7 @@ import org.springframework.kafka.support.serializer.JsonDeserializer; import org.springframework.kafka.test.EmbeddedKafkaBroker; import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.transaction.PlatformTransactionManager; import static java.util.Collections.singleton; import static org.assertj.core.api.Assertions.assertThat; @@ -62,7 +65,7 @@ public class KafkaItemWriterTests { embeddedKafka.addTopics("topic2"); } - // @Test + @Test public void testBaseKafkaItemWriter() { final String topicName = "topic1"; ApplicationContextRunner applicationContextRunner = new ApplicationContextRunner() @@ -119,6 +122,11 @@ public class KafkaItemWriterTests { @Configuration public static class CustomMappingConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemReader> itemReader() { List> list = new ArrayList<>(5); diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemReaderAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemReaderAutoConfigurationTests.java index e886b4df..e8da8125 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemReaderAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemReaderAutoConfigurationTests.java @@ -43,6 +43,7 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.item.support.ListItemWriter; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; @@ -53,6 +54,7 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.cloud.task.batch.autoconfigure.SingleStepJobAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; @@ -205,6 +207,11 @@ public class AmqpItemReaderAutoConfigurationTests { @Configuration public static class BaseConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public ListItemWriter> itemWriter() { return new ListItemWriter<>(); diff --git a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemWriterAutoConfigurationTests.java b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemWriterAutoConfigurationTests.java index e1b36825..8151355d 100644 --- a/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemWriterAutoConfigurationTests.java +++ b/spring-cloud-starter-single-step-batch-job/src/test/java/org/springframework/cloud/task/batch/autoconfigure/rabbit/AmqpItemWriterAutoConfigurationTests.java @@ -47,6 +47,7 @@ import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.support.ListItemReader; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; @@ -58,6 +59,7 @@ import org.springframework.cloud.task.batch.autoconfigure.SingleStepJobAutoConfi import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.RowMapper; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; @@ -190,6 +192,11 @@ public class AmqpItemWriterAutoConfigurationTests { public static class ItemWriterConfiguration { + @Bean + public PlatformTransactionManager platformTransactionManager() { + return new ResourcelessTransactionManager(); + } + @Bean public RowMapper> rowMapper() { return (rs, rowNum) -> { diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerCoreTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerCoreTests.java index 2a3fda66..49bf6e8b 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerCoreTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerCoreTests.java @@ -98,9 +98,9 @@ public class TaskJobLauncherApplicationRunnerCoreTests { public void init() { this.transactionManager = new ResourcelessTransactionManager(); this.jobs = new JobBuilderFactory(this.jobRepository); - this.steps = new StepBuilderFactory(this.jobRepository, this.transactionManager); + this.steps = new StepBuilderFactory(this.jobRepository); Tasklet tasklet = (contribution, chunkContext) -> RepeatStatus.FINISHED; - this.step = this.steps.get("step").tasklet(tasklet).build(); + this.step = this.steps.get("step").tasklet(tasklet).transactionManager(this.transactionManager).build(); this.job = this.jobs.get("job").start(this.step).build(); this.runner = new TaskJobLauncherApplicationRunner(this.jobLauncher, this.jobExplorer, this.jobRepository, new TaskBatchProperties()); @@ -138,7 +138,9 @@ public class TaskJobLauncherApplicationRunnerCoreTests { @DirtiesContext @Test public void runDifferentInstances() throws Exception { - this.job = this.jobs.get("job").start(this.steps.get("step").tasklet(throwingTasklet()).build()).build(); + this.job = this.jobs.get("job").start( + this.steps.get("step").tasklet(throwingTasklet()).transactionManager(this.transactionManager).build()) + .build(); // start a job instance JobParameters jobParameters = new JobParametersBuilder().addString("name", "foo").toJobParameters(); runFailedJob(jobParameters); @@ -152,9 +154,10 @@ public class TaskJobLauncherApplicationRunnerCoreTests { @DirtiesContext @Test public void retryFailedExecutionOnNonRestartableJob() throws Exception { - this.job = this.jobs.get("job").preventRestart() - .start(this.steps.get("step").tasklet(throwingTasklet()).build()).incrementer(new RunIdIncrementer()) - .build(); + this.job = this.jobs + .get("job").preventRestart().start(this.steps.get("step").tasklet(throwingTasklet()) + .transactionManager(this.transactionManager).build()) + .incrementer(new RunIdIncrementer()).build(); runFailedJob(new JobParameters()); runFailedJob(new JobParameters()); // A failed job that is not restartable does not re-use the job params of @@ -171,7 +174,9 @@ public class TaskJobLauncherApplicationRunnerCoreTests { @DirtiesContext @Test public void retryFailedExecutionWithNonIdentifyingParameters() throws Exception { - this.job = this.jobs.get("job").start(this.steps.get("step").tasklet(throwingTasklet()).build()) + this.job = this.jobs + .get("job").start(this.steps.get("step").tasklet(throwingTasklet()) + .transactionManager(this.transactionManager).build()) .incrementer(new RunIdIncrementer()).build(); JobParameters jobParameters = new JobParametersBuilder().addLong("id", 1L, false).addLong("foo", 2L, false) .toJobParameters(); @@ -184,7 +189,9 @@ public class TaskJobLauncherApplicationRunnerCoreTests { @DirtiesContext @Test public void retryFailedExecutionWithDifferentNonIdentifyingParametersFromPreviousExecution() throws Exception { - this.job = this.jobs.get("job").start(this.steps.get("step").tasklet(throwingTasklet()).build()) + this.job = this.jobs + .get("job").start(this.steps.get("step").tasklet(throwingTasklet()) + .transactionManager(this.transactionManager).build()) .incrementer(new RunIdIncrementer()).build(); JobParameters jobParameters = new JobParametersBuilder().addLong("id", 1L, false).addLong("foo", 2L, false) .toJobParameters(); diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java index 4201103d..5538a040 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java @@ -61,6 +61,7 @@ import org.springframework.context.annotation.Import; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -188,6 +189,9 @@ public class TaskJobLauncherApplicationRunnerTests { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public Job job() { return this.jobBuilderFactory.get("job").start(this.stepBuilderFactory.get("step1").tasklet(new Tasklet() { @@ -196,7 +200,7 @@ public class TaskJobLauncherApplicationRunnerTests { System.out.println("Executed"); return RepeatStatus.FINISHED; } - }).build()).build(); + }).transactionManager(transactionManager).build()).build(); } } @@ -215,6 +219,9 @@ public class TaskJobLauncherApplicationRunnerTests { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public Job jobFail() { return this.jobBuilderFactory.get("jobA").start(this.stepBuilderFactory.get("step1").tasklet(new Tasklet() { @@ -223,7 +230,7 @@ public class TaskJobLauncherApplicationRunnerTests { System.out.println("Executed"); throw new IllegalStateException("WHOOPS"); } - }).build()).build(); + }).transactionManager(transactionManager).build()).build(); } @Bean @@ -235,7 +242,7 @@ public class TaskJobLauncherApplicationRunnerTests { System.out.println("Executed"); return RepeatStatus.FINISHED; } - }).build()).build(); + }).transactionManager(transactionManager).build()).build(); } } diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java index 82b8f405..3a16b7aa 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java @@ -28,6 +28,7 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.SpringApplication; import org.springframework.cloud.task.batch.configuration.TaskBatchTest; import org.springframework.cloud.task.configuration.EnableTask; @@ -77,7 +78,7 @@ public class PrefixTests { .start(stepBuilderFactory.get("step1").tasklet((contribution, chunkContext) -> { System.out.println("Executed"); return RepeatStatus.FINISHED; - }).build()).build(); + }).transactionManager(new ResourcelessTransactionManager()).build()).build(); } @Bean diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrimaryKeyTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrimaryKeyTests.java index 008b0be5..58826ec9 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrimaryKeyTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrimaryKeyTests.java @@ -28,6 +28,7 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.boot.SpringApplication; import org.springframework.cloud.task.batch.configuration.TaskBatchTest; import org.springframework.cloud.task.configuration.EnableTask; @@ -76,7 +77,7 @@ class PrimaryKeyTests { .start(stepBuilderFactory.get("step1").tasklet((contribution, chunkContext) -> { System.out.println("Executed"); return RepeatStatus.FINISHED; - }).build()).build(); + }).transactionManager(new ResourcelessTransactionManager()).build()).build(); } @Bean diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java index dde5f04b..27a63bb8 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java @@ -37,6 +37,7 @@ import org.springframework.batch.core.job.SimpleJob; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; @@ -62,6 +63,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; +import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -285,13 +287,16 @@ public class TaskBatchExecutionListenerTests { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public Job job() { return this.jobBuilderFactory.get("job") .start(this.stepBuilderFactory.get("step1").tasklet((contribution, chunkContext) -> { System.out.println("Executed"); return RepeatStatus.FINISHED; - }).build()).build(); + }).transactionManager(this.transactionManager).build()).build(); } } @@ -307,13 +312,16 @@ public class TaskBatchExecutionListenerTests { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + PlatformTransactionManager transactionManager; + @Bean public Job job() { return this.jobBuilderFactory.get("job") .start(this.stepBuilderFactory.get("step1").tasklet((contribution, chunkContext) -> { System.out.println("Executed"); return RepeatStatus.FINISHED; - }).build()).build(); + }).transactionManager(transactionManager).build()).build(); } } @@ -330,6 +338,9 @@ public class TaskBatchExecutionListenerTests { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public FactoryBean job() { return new FactoryBean() { @@ -340,7 +351,7 @@ public class TaskBatchExecutionListenerTests { .tasklet((contribution, chunkContext) -> { System.out.println("Executed"); return RepeatStatus.FINISHED; - }).build()) + }).transactionManager(transactionManager).build()) .build(); } @@ -372,7 +383,7 @@ public class TaskBatchExecutionListenerTests { System.out.println("Executed"); return RepeatStatus.FINISHED; } - }).build()).build(); + }).transactionManager(new ResourcelessTransactionManager()).build()).build(); } @Bean @@ -414,13 +425,16 @@ public class TaskBatchExecutionListenerTests { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public Job job1() { return this.jobBuilderFactory.get("job1") .start(this.stepBuilderFactory.get("job1step1").tasklet((contribution, chunkContext) -> { System.out.println("Executed job1"); return RepeatStatus.FINISHED; - }).build()).build(); + }).transactionManager(transactionManager).build()).build(); } @Bean @@ -429,7 +443,7 @@ public class TaskBatchExecutionListenerTests { .start(this.stepBuilderFactory.get("job2step1").tasklet((contribution, chunkContext) -> { System.out.println("Executed job2"); return RepeatStatus.FINISHED; - }).build()).build(); + }).transactionManager(transactionManager).build()).build(); } } diff --git a/spring-cloud-task-integration-tests/src/test/java/configuration/JobConfiguration.java b/spring-cloud-task-integration-tests/src/test/java/configuration/JobConfiguration.java index 860b8eae..69f4ec9f 100644 --- a/spring-cloud-task-integration-tests/src/test/java/configuration/JobConfiguration.java +++ b/spring-cloud-task-integration-tests/src/test/java/configuration/JobConfiguration.java @@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; /** * @author Glenn Renfro @@ -52,6 +53,9 @@ public class JobConfiguration { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public Job job() { return this.jobBuilderFactory.get("job").start(step1()).next(step2()).build(); @@ -65,7 +69,7 @@ public class JobConfiguration { System.out.println("Executed"); return RepeatStatus.FINISHED; } - }).build(); + }).transactionManager(transactionManager).build(); } @Bean @@ -84,7 +88,7 @@ public class JobConfiguration { System.out.println(">> " + item); } } - }).build(); + }).transactionManager(transactionManager).build(); } } diff --git a/spring-cloud-task-integration-tests/src/test/java/configuration/JobSkipConfiguration.java b/spring-cloud-task-integration-tests/src/test/java/configuration/JobSkipConfiguration.java index 55dac5e0..2ded65c3 100644 --- a/spring-cloud-task-integration-tests/src/test/java/configuration/JobSkipConfiguration.java +++ b/spring-cloud-task-integration-tests/src/test/java/configuration/JobSkipConfiguration.java @@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; /** * @author Glenn Renfro @@ -45,6 +46,9 @@ public class JobSkipConfiguration { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public Job job() { return this.jobBuilderFactory.get("job").start(step1()).next(step2()).build(); @@ -58,7 +62,7 @@ public class JobSkipConfiguration { System.out.println("Executed"); return RepeatStatus.FINISHED; } - }).build(); + }).transactionManager(transactionManager).build(); } @Bean @@ -69,7 +73,7 @@ public class JobSkipConfiguration { public String process(Object item) throws Exception { return String.valueOf(Integer.parseInt((String) item) * -1); } - }).writer(new SkipItemWriter()).build(); + }).writer(new SkipItemWriter()).transactionManager(transactionManager).build(); } } diff --git a/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java b/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java index e81dfa75..d3c542ea 100644 --- a/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java +++ b/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java @@ -38,6 +38,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.task.configuration.EnableTask; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; @EnableTask @SpringBootApplication @@ -59,6 +60,9 @@ public class BatchEventsApplication { @Autowired private StepBuilderFactory stepBuilderFactory; + @Autowired + private PlatformTransactionManager transactionManager; + @Bean public Step step1() { return this.stepBuilderFactory.get("step1").tasklet(new Tasklet() { @@ -67,7 +71,7 @@ public class BatchEventsApplication { System.out.println("Tasklet has run"); return RepeatStatus.FINISHED; } - }).build(); + }).transactionManager(transactionManager).build(); } @Bean @@ -86,7 +90,7 @@ public class BatchEventsApplication { System.out.println(">> " + item); } } - }).build(); + }).transactionManager(transactionManager).build(); } @Bean diff --git a/spring-cloud-task-samples/batch-job/src/main/java/io/spring/configuration/JobConfiguration.java b/spring-cloud-task-samples/batch-job/src/main/java/io/spring/configuration/JobConfiguration.java index 221aadd4..a2057b5f 100644 --- a/spring-cloud-task-samples/batch-job/src/main/java/io/spring/configuration/JobConfiguration.java +++ b/spring-cloud-task-samples/batch-job/src/main/java/io/spring/configuration/JobConfiguration.java @@ -29,6 +29,7 @@ import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.PlatformTransactionManager; /** * @author Michael Minella @@ -44,6 +45,9 @@ public class JobConfiguration { @Autowired public StepBuilderFactory stepBuilderFactory; + @Autowired + public PlatformTransactionManager transactionManager; + @Bean public Job job1() { return this.jobBuilderFactory.get("job1").start(this.stepBuilderFactory.get("job1step1").tasklet(new Tasklet() { @@ -52,7 +56,7 @@ public class JobConfiguration { logger.info("Job1 was run"); return RepeatStatus.FINISHED; } - }).build()).build(); + }).transactionManager(transactionManager).build()).build(); } }