JavaEEJSR352-Jberet动态作业生成器和执行

JavaEEJSR352-Jberet动态作业生成器和执行,java,java-ee-7,jsr352,jberet,Java,Java Ee 7,Jsr352,Jberet,从Jberet了解到,作业可以作为静态xml的替代品动态构建,但该指南没有关于如何执行作业构建的任何输入,因此愿意知道如何执行作业 Job job = new JobBuilder(jobName) .restartable(false) .property("jobk1", "J") .property("jobk2", "J") .listener("jobListener1", new String[]{"jobListenerk1", "#{jobParameters['

从Jberet了解到,作业可以作为静态xml的替代品动态构建,但该指南没有关于如何执行作业构建的任何输入,因此愿意知道如何执行作业

Job job = new JobBuilder(jobName)
  .restartable(false)
  .property("jobk1", "J")
  .property("jobk2", "J")
  .listener("jobListener1", new String[]{"jobListenerk1", "#{jobParameters['jobListenerPropVal']}"},
          new String[]{"jobListenerk2", "#{jobParameters['jobListenerPropVal']}"})

  .step(new StepBuilder(stepName)
          .properties(new String[]{"stepk1", "S"}, new String[]{"stepk2", "S"})
          .batchlet(batchlet1Name, new String[]{"batchletk1", "B"}, new String[]{"batchletk2", "B"})
          .listener("stepListener1", stepListenerProps)
          .stopOn("STOP").restartFrom(stepName).exitStatus()
          .endOn("END").exitStatus("new status for end")
          .failOn("FAIL").exitStatus()
          .nextOn("*").to(step2Name)
          .build())

  .step(new StepBuilder(step2Name)
          .batchlet(batchlet1Name)
          .build())

          .build();

简而言之,您可以使用以下方法启动使用Java JSL创建的作业:

org.jberet.operations.AbstractJobOperator#start(org.jberet.job.model.Job, java.util.Properties)
1.3.0版beta版

由于Java JSL是一个额外的功能,因此您需要获得JobOperator的JBeret实现,并调用上述启动方法:

import org.jberet.job.model.Job;
import org.jberet.operations.JobOperatorImpl;
import org.jberet.spi.JobOperatorContext;

JobOperatorImpl jobOperator = (JobOperatorImpl) JobOperatorContext.getJobOperatorContext().getJobOperator();

Job job = new JobBuilder(jobName)
                .step(new StepBuilder(stepName)
                        .reader(...)
                        .writer(...)
                        .build())
                .build();
Properties params = null;
long jobExecutionId = jobOperator.start(job, params);
1.2.0版最终版

JobOperatorImpl jobOperator = (JobOperatorImpl) BatchRuntime.getJobOperator();
Properties jobProperties = new Properties();
long jobExecutionId = jobOperator.start(job, jobProperties);

有关更多详细信息,请参阅JBeret和代码。

谢谢<代码>导入org.jberet.spi.JobOperatorContext在jberet-core-1.3.0-beta中可用,但现在我使用的是V1.2.0final,所以我使用了
JobOperatorImpl jobOperator=(JobOperatorImpl)BatchRuntime.getJobOperator()