Spring boot + spring batch without DataSource

前端 未结 5 744
余生分开走
余生分开走 2020-12-19 00:51

I\'m trying to configure spring batch inside spring boot project and I want to use it without data source. I\'ve found that ResourcelessTransactionManager is th

5条回答
  •  無奈伤痛
    2020-12-19 01:12

    You can try excluding the DataSourceAutoConfiguration in @SpringBootApplication. See the sample code below.

    import org.springframework.batch.core.Job;
    import org.springframework.batch.core.Step;
    import org.springframework.batch.core.StepContribution;
    import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
    import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
    import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
    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.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.context.annotation.Bean;
    
    @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
    @EnableBatchProcessing
    public class SampleBatchApplication {
    
    @Autowired
    private JobBuilderFactory jobs;
    
    @Autowired
    private StepBuilderFactory steps;
    
    @Bean
    protected Tasklet tasklet() {
    
        return new Tasklet() {
            @Override
            public RepeatStatus execute(StepContribution contribution, ChunkContext context) {
                return RepeatStatus.FINISHED;
            }
        };
    }
    
    @Bean
    public Job job() throws Exception {
        return this.jobs.get("job").start(step1()).build();
    }
    
    @Bean
    protected Step step1() throws Exception {
        return this.steps.get("step1").tasklet(tasklet()).build();
    }
    
    public static void main(String[] args) throws Exception {
        System.exit(SpringApplication.exit(SpringApplication.run(SampleBatchApplication.class, args)));
       }
    }
    

    And sample test class

    import org.junit.Rule;
    import org.junit.Test;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.test.rule.OutputCapture;
    import static org.assertj.core.api.Assertions.assertThat;
    public class SampleBatchApplicationTests {
    @Rule
    public OutputCapture outputCapture = new OutputCapture();
    
    @Test
    public void testDefaultSettings() throws Exception {
        assertThat(SpringApplication.exit(SpringApplication.run(SampleBatchApplication.class))).isEqualTo(0);
        String output = this.outputCapture.toString();
        assertThat(output).contains("completed with the following parameters");
      }
    }
    

提交回复
热议问题