Spring Batch - 作为Web服务调用

时间:2014-03-28 06:45:00

标签: spring-batch

我有一个Spring Batch工作。我是Spring Batch的新手,并且一直通过CommandLineJobRunner调用。

这就是我的电话:

org.springframework.batch.core.launch.support.CommandLineJobRunner spring-batch-myProject.xml SpringJobBean.MyProjectImportDataJob

现在我必须从Web服务(Spring MVC)中调用我的批处理作业。在我的端点中,这是调用调用。我需要在if语句中调用批处理作业。我该怎么做?我读到了JobLauncher ......但不知道如何告诉它要发布什么?

protected Object invokeInternal(Object aObj) throws Exception {
    RunDataProcessingImportRequest request = (RunDataProcessingImportRequest) aObj;

    RunDataProcessingImportResponse response = new RunDataProcessingImportResponse();
    if (request.getDataProcessingType().equals(PROJECT_TYPE)){

        response.setResultCd(1);
    } else {
        response.setResultCd(0);
        response.setErrorCode(1l);
        response.setErrorMessage("Incorrect process type");
    }
    return response;
}

1 个答案:

答案 0 :(得分:1)

这个问题的答案实际上取决于您正在使用的Spring Batch的版本。

如果您使用的是2.0.x或更早版本,则可以使用Spring Batch Admin为启动/停止/ etc作业提供REST端点。您需要做的就是将罐子添加到您的应用程序并提供少量配置。

如果您使用的是2.2.x或更高版本,并且允许使用Spring Batch Admin的快照版本,则同样适用于上述内容。

如果您对使用Spring Batch Admin不感兴趣,则需要编写自己的端点并从那里启动作业。但是,它应该是相当微不足道的(我还没有测试下面的代码):

@Controller
public class JobLaunchingController {
    @Autowire
    JobLauncher jobLauncher;

    @Autowire
    JobRegistry jobRegistry;

    @RequestMapping("/launch")
    public @ResponseBody JobExecution launch(
            @RequestParam(value="name", required=true) String name,
            @RequestParam(value="params", required=false) String params) {

        Job job = jobRegistry.getJob(name);
        JobParametersBuilder paramsBuilder = new JobParametersBuilder();

        if(params != null) {
            // parse job parameters
        }

        return jobLauncher.run(job, paramsBuilder.toJobParameters());
    }
}

上面的代码假设您有多个作业来提供执行能力。如果不是,您可以@Autowire JobJobRegistry本身插入您的控制器中(而不是JobLauncher)。

您可以在此处阅读有关Spring服务的更多信息:https://spring.io/guides/gs/rest-service/

您可以在此处详细了解JobRegistryhttp://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/core/launch/JobLauncher.html

最后,您可以在此处的第4.6.2节中详细了解{{1}}:http://docs.spring.io/spring-batch/reference/html/configureJob.html