如何解决spring批处理:如何动态创建步骤和任务
我是春季新手和春季批次新手 - 所以,请耐心等待。
我知道 Spring Batch 是帮助运行步骤和任务的框架。
我尝试通过创建步骤和任务来使用 spring 批处理,但这些步骤和任务在程序构建/编译时是硬编码的。但是,我无法弄清楚如何动态创建任务和步骤。
我想要做的是让用户创建一个脚本,说明如何从步骤列表中组合任务。每个步骤都会调用对现有 REST 端点的远程调用。一个任务将有多个这样的步骤。用户将创建多个此类任务。
是否可以通过这样的步骤动态创建这样的任务?如果是,您能否指出一些示例代码,如何使用所需的 API 执行此操作?
更新:
我了解使用 callRestApplication() 调用 REST 应用程序的 HelloWorld 作业如下所示。
@SpringBootApplication
@EnableBatchProcessing
public class HelloApplication {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step step() {
return this.stepBuilderFactory.get("step1")
.tasklet((stepContribution,chunkContext) -> {
callRestApplication();
return RepeatStatus.FINISHED;
}).build();
}
@Bean
public Job job() {
return this.jobBuilderFactory.get("HelloWorldJob")
.start(step())
.build();
}
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class,args);
}
}
然而,这是静态的。我正在寻找一种方法可以做这样的事情
public static void main(String[] args) {
SpringApplication.run(HelloagainApplication.class,args);
List<JobDeFinition> jobDeFinitions = parseScript();
for (JobDeFinition jobDeFinition : jobDeFinitions) {
Job job = new Job();
job.setName(jobDeFinition.getName());
for (StepDeFinition stepDeFinition : jobDeFinition.getStepDeFinitions()) {
Step step = new Step();
step.setEndPoint(stepDeFinition.getEndPoint());
step.setName(stepDeFinition.getName());
step.setProperty1(stepDeFinition.getProp1());
job.addStep(step);
}
job.startJob();
}
}
如果脚本有 10 个作业定义,则将启动 10 个作业,每个作业有 x 个步骤。
在春季批次中,我该怎么做
- job.addStep(step);
- job.startJob();
谢谢
解决方法
Spring Batch 中没有这样的功能。您需要编写自定义代码来解析用户的脚本并相应地创建作业/步骤定义。
也就是说,Spring Cloud Dataflow 可能会对您有所帮助。您可以预先定义您的任务,并让用户 compose them 使用 GUI 或基于文本的可脚本化 DSL。您可能会感兴趣的另一个功能是来自 Spring Cloud Task 的 single-step job starter,它允许您通过提供一些属性(无需编码)来动态创建单步作业。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。