spring批处理:如何动态创建步骤和任务

ej83mcc0  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(511)

我是一个 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();
谢谢

ryhaxcpt

ryhaxcpt1#

在spring批处理中没有这样的特性。您需要编写自定义代码来解析用户的脚本,并相应地创建作业/步骤定义。
也就是说,spring云数据流可能会帮助您。您可以预先定义任务,并让用户使用gui或基于文本的可脚本dsl编写任务。您可能感兴趣的另一个特性是springcloudtask的单步作业启动程序,它允许您通过提供一些属性(无需编码)来动态创建单步作业。

相关问题