我是一个 Spring 新手和 Spring 批新手-所以,请容忍我。
我知道springbatch是一个帮助运行步骤和任务的框架。
我尝试使用springbatch创建步骤和任务,但这些步骤和任务是在程序构建/编译时硬编码的。但是,我不知道如何动态地创建任务和步骤。
我想做的是让用户创建一个脚本,说明如何从步骤列表中组装任务。每个步骤都将调用对现有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个步骤。
在spring批中,我如何做以下工作
job.addstep(步骤);
job.startjob();
谢谢
1条答案
按热度按时间ryhaxcpt1#
在spring批处理中没有这样的特性。您需要编写自定义代码来解析用户的脚本,并相应地创建作业/步骤定义。
也就是说,spring云数据流可能会帮助您。您可以预先定义任务,并让用户使用gui或基于文本的可脚本dsl编写任务。您可能感兴趣的另一个特性是springcloudtask的单步作业启动程序,它允许您通过提供一些属性(无需编码)来动态创建单步作业。