我有一个弹出批处理作业,执行以下操作...
步骤1.创建需要处理的对象列表
步骤2.根据步骤1中创建的对象列表中的项目数创建步骤列表。
步骤3.尝试执行步骤2中创建的步骤列表中的步骤。
执行x步骤在executeDynamicStepsTasklet()中完成。虽然代码运行没有任何错误,但它似乎没有做任何事情。我在该方法中看到的内容是否正确?
感谢
/ * * * /
rctl
所以现在我有一个需要执行的动态步骤列表,我相信它们在StepScope中。有人可以告诉我如何执行它们
答案 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;
...
}