Spring批处理在tasklet中执行动态生成的步骤

时间:2016-08-15 03:42:37

标签: spring spring-batch

我有一个弹出批处理作业,执行以下操作...

步骤1.创建需要处理的对象列表

步骤2.根据步骤1中创建的对象列表中的项目数创建步骤列表。

步骤3.尝试执行步骤2中创建的步骤列表中的步骤。

执行x步骤在executeDynamicStepsTasklet()中完成。虽然代码运行没有任何错误,但它似乎没有做任何事情。我在该方法中看到的内容是否正确?

感谢

/ *  *  * /

rctl

所以现在我有一个需要执行的动态步骤列表,我相信它们在StepScope中。有人可以告诉我如何执行它们

1 个答案:

答案 0 :(得分:0)

这不起作用。您的Tasklet只是创建一个FlowStep作为第一步的作业。使用jobBuilderfactory只创建作业。它没有启动它。方法名“start”可能会产生误导,因为这只定义了第一步。但它没有启动这项工作。

一旦启动,您就无法更改作业的结构(其步骤和子步骤)。因此,不可能根据步骤1中计算的内容在步骤2中配置流程步骤。(当然,您可以在弹簧结构内部进行更深入的黑客攻击并直接修改bean等等......但是你不要我想这样做。)

我建议你使用一种带有适当的postConstruct方法的“SetupBean”,该方法被注入到你的类中,用于配置你的工作。这个“SetupBean”负责计算正在处理的对象列表。

@Component
public class SetUpBean {

  private List<Object> myObjects;

  @PostConstruct
  public afterPropertiesSet() {
    myObjects = ...;
  }

  public List<Object> getMyObjects() {
   return myObjects;
  }
}

@Configuration
public class JobConfiguration {

   @Autowired
   private JobBuilderFactory jobBuilderFactory;

   @Autowired
   private StepBuilderFactory stepBuilderFactory;

   @Autowired
   private SetUpBean setup;

   ... 
}