繁体   English   中英

带有两个步骤的Spring Batch。 为什么第二步永远不会运行而第一步却陷入无限循环

[英]Spring Batch with two Steps in flow. Why second step never run and first step is in infinite loop

我的要求:创建一个调度程序以定期调用该批处理,在批处理内部,我需要两个步骤。 StepA将开始运行,并根据结果进行调用。 如果您查看控制台日志,您会看到stepA被多次调用,也就是说,恰好在同一时刻。 根据@Scheduled(fixedRate = 60000),每分钟应该只有一个呼叫。 艾格斯(Iguess)认为,由于我删除了计划表,并且遇到了类似问题,因此该问题与Scheduller无关。 其他相关问题是从未调用StepB。 我试图创建customDecider(“ ... next(customDecider()”)并创建一个私有方法来返回JobExecutionDecider。似乎两者都没有生效。我的最佳猜测是池线程正在引起在StepA中出现一些“无限循环”,因为我没有正确设置某些东西,但没有找到可能的结果。

BatchConfig.java

   /*@Bean
   public JobExecutionDecider customDecider() throws Exception{
          return new CustomDecider();
   }*/

   private JobExecutionDecider decider(boolean decision){
          return(jobExecution, stepExecution) -> new FlowExecutionStatus(decision ? "OK" : "FAILED");
   }


   @Bean
   public Job job(Step stepA, Step stepB) {
          return jobBuilderFactory.get("job1")
                       //.flow(stepA).on("FAILED").to(stepB).end().build();
                        .start(stepA)
                        .next(decider(true))
                        .on("FAILED")
                        .stop()
                        .from(stepA)
                        .next(stepB)
                        .build()
                        .build();

   }

   @Bean
   public Step stepA(ItemReader<String> readerA, ItemWriter<String> writerA) {
          return stepBuilderFactory.get("stepA").<String, String> chunk(1)
                       .reader(readerA)
                       .writer(writerA)
                       .allowStartIfComplete(true)
                       .build();

   }

   @Bean
   @StepScope
   public ItemReader<String> readerA() {
          return new CustomItemReaderA();

   }

   @Bean
   public ItemWriter<String> writerA() {
          return new CustomItemWriterA();

   }

   @Bean
   public Step stepB(ItemReader<String> readerB, ItemWriter<String> writerB) {
          return stepBuilderFactory.get("stepB").<String, String> chunk(1)
                       .reader(readerB)
                       .writer(writerB)
                       .allowStartIfComplete(true)
                       .build();

   }

   @Bean
   @StepScope
   public ItemReader<String> readerB() {
          return new CustomItemReaderB();

   }

   @Bean
   public ItemWriter<String> writerB() {
          return new CustomItemWriterB();

   }

CustomDecider.java

public class CustomDecider implements JobExecutionDecider  {


       @Override
       public FlowExecutionStatus decide(JobExecution jobExecution,
                     StepExecution stepExecution) {
              return new FlowExecutionStatus("OK");
       }

}

CustomItemReaderA 

public class CustomItemReaderA  implements ItemReader<String>{

       private static final Logger log = LoggerFactory.getLogger(CustomItemReaderA.class);
       @Override
       public String read() throws Exception, UnexpectedInputException,
                     ParseException, NonTransientResourceException {
              log.info("rA");
              return "A";
       }

}

CustomItemWriterA 
public class CustomItemWriterA  implements ItemWriter<String>  {

       private static final Logger log = LoggerFactory.getLogger(CustomItemWriterA.class);
       @Override
       public void write(List<? extends String> items) throws Exception {
              log.info("wA");

       }

}

CustomItemReaderB和CustomItemReaderB与Custom ... A相同,只是在log.info期间从A字母更改为B字母并返回

控制台日志

2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.488  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.504  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemReaderA            : rA
2016-01-18 21:40:37.519  INFO 7340 --- [pool-2-thread-1] com.example.CustomItemWriterA            : wA
and so on ...

调度

@Component
public class QueueScheduler {

       private static final Logger log = LoggerFactory
                     .getLogger(QueueScheduler.class);

    private Job job;
    private JobLauncher jobLauncher;

    @Autowired
    public QueueScheduler(JobLauncher jobLauncher, @Qualifier("job") Job job){
        this.job = job;
        this.jobLauncher = jobLauncher;
   }



   @Scheduled(fixedRate=60000)
   public void runJob(){
          try{
       jobLauncher.run(job, new JobParameters());
          }catch(Exception ex){
                 log.info(ex.getMessage());
          }
   }
}

问题出在您的CustomItemReaderA 您需要告诉阅读器何时停止“读取”数据。 如果您按照以下说明修改阅读器,则执行将按预期进行。

public class CustomItemReaderA implements ItemReader<String> {
    private static final Logger log = LoggerFactory
            .getLogger(CustomItemReaderA.class);
    private int readCount = 0;

    @Override
    public String read() throws Exception, UnexpectedInputException,
            ParseException, NonTransientResourceException {
        log.info("Inside CustomItemReaderA");
        if (readCount == 1) {
            return null;
        }
        readCount++;
        return "Read CustomItemReaderA";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM