spring batch

2020-04-27  本文已影响0人  刘小刀tina

1. job对象 满足条件判断的方执行step

@Configuration
@EnableBatchProcessing
public class JobDemo {

    @Autowired
    private JobBuilderFactory jobBuilderFactory ;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job  jobDemoJob(){
//        return jobBuilderFactory.get("jobDemoJob")
//                .start(jobDemoStep1())
//                .next(jobDemoStep2())
//                .next(jobDemoStep3())
//                .build();

        /**
         * 满足条件判断的方执行step
         */
        return jobBuilderFactory.get("jobDemoJob")
                .start(jobDemoStep1())
                .on("COMPLETED").to(jobDemoStep2())
                .from(jobDemoStep2()).on("COMPLETED").to(jobDemoStep3())
                .from(jobDemoStep3()).end()
                .build();

    }

    @Bean
    public  Step jobDemoStep1() {
        return stepBuilderFactory.get("jobDemoStep1")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("第一个step名称为:jobDemoStep1");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }

    @Bean
    public  Step jobDemoStep2() {
        return stepBuilderFactory.get("jobDemoStep2")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("第一个step名称为:jobDemoStep2");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }

    @Bean
    public  Step jobDemoStep3() {
        return stepBuilderFactory.get("jobDemoStep3")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("第一个step名称为:jobDemoStep3");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }


}

2. flow对象

/**
 * @program: demo-spring-batch
 * @description
 *  创建flow对象,将 step步骤封装起来
 * @author: tina.liu
 * @create: 2020-04-27 16:33
 **/
@Configuration
@EnableBatchProcessing
public class flow {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;


    /**
     * 创建step对象
     * @return
     */
    @Bean
    public Step step1(){
        return stepBuilderFactory.get("step1")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("步骤ste1");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }

    @Bean
    public Step step2(){
        return stepBuilderFactory.get("step2")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("步骤step2");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }


    @Bean
    public Step step3(){
        return stepBuilderFactory.get("step3")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("步骤step3");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }

    /**
     * 创建 Flow对象
     * @return
     */
    @Bean
    public Flow flowDemo(){
        return new FlowBuilder<Flow>("flowDemo")
                .start(step1())
                .next(step2())
                .build();
    }


    @Bean
    public Job flowDemoJob(){
        return jobBuilderFactory.get("flowDemoJob")
                .start(flowDemo())
                .next(step3())
                .end()
                .build();
    }

}

3. split 并发执行

@Configuration
@EnableBatchProcessing
public class SplitDemo {

    @Autowired
    private JobBuilderFactory jobBuilderFactory ;

    @Autowired
    private StepBuilderFactory stepBuilderFactory ;


    /**
     * 创建 3个step对象
     */
    @Bean
    public Step splitDemoStep1(){
        return stepBuilderFactory.get("splitDemoStep1")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("打印名字为:splitDemoStep1");
                        return null;
                    }
                }).build();
    }

    @Bean
    public Step splitDemoStep2(){
        return stepBuilderFactory.get("splitDemoStep2")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("打印名字为:splitDemoStep2");
                        return null;
                    }
                }).build();
    }

    @Bean
    public Step splitDemoStep3(){
        return stepBuilderFactory.get("splitDemoStep3")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("打印名字为:splitDemoStep3");
                        return null;
                    }
                }).build();
    }

    /**
     * 创建两个flow
     */
    @Bean
    public Flow splitDemoFlow1(){
        return new FlowBuilder<Flow>("splitDemoFlow1")
                .start(splitDemoStep1())
                .build();
    }

    @Bean
    public Flow splitDemoFlow2(){
        return new FlowBuilder<Flow>("splitDemoFlow2")
                .start(splitDemoStep2())
                .next(splitDemoStep3())
                .build();
    }

    /**
     * 创建一个job对象
     */
    @Bean
    public Job splitDemoJob(){
        return jobBuilderFactory.get("splitDemoJob")
                .start(splitDemoFlow1())
                .split(new SimpleAsyncTaskExecutor()).add(splitDemoFlow2())
                .end()
                .build();
    }


}

4. decide 决策器

@Configuration
@EnableBatchProcessing
public class DeciderDemo {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    /**
     * 创建三个step
     */
    @Bean
    public Step  deciderDemoStep1(){
        return stepBuilderFactory.get("deciderDemoStep1")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("步骤deciderDemoStep1");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }

    @Bean
    public Step  deciderDemoStep2(){
        return stepBuilderFactory.get("deciderDemoStep2")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("步骤deciderDemoStep2"+":even");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }
    @Bean
    public Step  deciderDemoStep3(){
        return stepBuilderFactory.get("deciderDemoStep3")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("步骤deciderDemoStep3"+"odd");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }

    /**
     * 创建一个决策器decider
     */
    @Bean
    public JobExecutionDecider deciderDemoDecider1(){
        return new MyDecider();
    }

    @Bean
    public Job deciderDemoJob1(){
        return jobBuilderFactory.get("deciderDemoJob1")
                .start(deciderDemoStep1())
                .next(deciderDemoDecider1())
                .from(deciderDemoDecider1()).on("even").to(deciderDemoStep2())
                .from(deciderDemoDecider1()).on("odd").to(deciderDemoStep3())
                .from(deciderDemoStep3()).on("*").to(deciderDemoDecider1())
                .end()
                .build();
    }

}

//创建一个决策起MyDecider类
 class MyDecider implements JobExecutionDecider {

    private int count=1;

    @Override
    public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
        count++;
        if( count%2 == 0){
            return new FlowExecutionStatus("even") ;
        }else {
            return new FlowExecutionStatus("odd") ;
        }
    }

}

5. job 嵌套

ps 须在配置文件中指明父job

spring.batch.job.names=parentJobDemoJob
子job 1
@Configuration
@EnableBatchProcessing
public class ChildJob1  {

   @Autowired
   private JobBuilderFactory jobBuilderFactory ;

   @Autowired
   private StepBuilderFactory stepBuilderFactory ;

   /**
    *创建step
    * @return
    */
   @Bean
   public Step childJob1Step1(){
       return stepBuilderFactory.get("childJob1Step1")
               .tasklet(new Tasklet() {
                   @Override
                   public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                       System.out.println("步骤 -》childJob1Step1");
                       return RepeatStatus.FINISHED;
                   }
               }).build();
   }

   /**
    * 创建job
    * @return
    */
   @Bean(value = "childJob1Job")
   public Job childJob1Job(){
       return jobBuilderFactory.get("childJob1Job")
               .start(childJob1Step1())
               .build();
   }


}

========================================================
子job 2
@EnableBatchProcessing
@Configuration
public class ChildJob2 {

   @Autowired
   private JobBuilderFactory jobBuilderFactory;

   @Autowired
   private StepBuilderFactory stepBuilderFactory;


   /**
    *创建step
    * @return
    */
   @Bean
   public Step childJob2Step1(){
       return stepBuilderFactory.get("childJob2Step1")
               .tasklet(new Tasklet() {
                   @Override
                   public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                       System.out.println("步骤 -》childJob2Step1");
                       return RepeatStatus.FINISHED;
                   }
               }).build();
   }

   /**
    *创建step
    * @return
    */
   @Bean
   public Step childJob2Step2(){
       return stepBuilderFactory.get("childJob2Step2")
               .tasklet(new Tasklet() {
                   @Override
                   public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                       System.out.println("步骤 -》childJob2Step2");
                       return RepeatStatus.FINISHED;
                   }
               }).build();
   }

   /**
    * 创建job
    * @return
    */
   @Bean(value = "childJob2Job")
   public Job childJob2Job(){
       return jobBuilderFactory.get("childJob2Job")
               .start(childJob2Step1())
               .next(childJob2Step2())
               .build();
   }


}

========================================================
 父job 
@Configuration
@EnableBatchProcessing
public class ParentJob
{
   @Autowired
   private JobBuilderFactory jobBuilderFactory;

   @Autowired
   private StepBuilderFactory stepBuilderFactory;

   @Autowired
   @Qualifier(value = "childJob1Job")
   private Job childJob1Job; //子job1

   @Autowired
   @Qualifier(value = "childJob2Job")
   private Job childJob2Job; //子job2

   @Autowired
   JobLauncher jobLauncher ; //job的启动器

   /**
    *  创建父job
    * @param repository
    * @param transactionManager
    * @return
    */
   @Bean
   public Job parentJobDemoJob(JobRepository repository, PlatformTransactionManager transactionManager){
       return jobBuilderFactory.get("parentJobDemoJob")
               .start(childJob1ss(repository,transactionManager))
               .next(childJob2ss(repository,transactionManager))
               .build();
   }

   /**
    * 将子Job 返回类型转变为step ,用到job启动器,事务管理器,和持久化
    * @param repository
    * @param transactionManager
    * @return
    */
   @Bean
   public  Step childJob2ss(JobRepository repository, PlatformTransactionManager transactionManager) {
       return new JobStepBuilder(new StepBuilder("childJob2"))
               .job((Job) childJob2Job)
               .launcher(jobLauncher)
               .repository(repository)
               .transactionManager(transactionManager)
               .build();
   }

   /**
    * 将子Job 返回类型转变为step ,用到job启动器,事务管理器,和持久化
    * @return
    */
   @Bean
   public Step childJob1ss(JobRepository repository, PlatformTransactionManager transactionManager) {
       return new JobStepBuilder(new StepBuilder("childJob1"))
               .job((Job) childJob1Job)
               .launcher(jobLauncher)
               .repository(repository)
               .transactionManager(transactionManager)
               .build();
   }


}

========================================================

上一篇 下一篇

猜你喜欢

热点阅读