2014-03-28 64 views
1

我有一個Spring批處理作業。我是Spring Batch的新手,並且始終通過CommandLineJobRunner調用。Spring批處理 - 作爲web服務調用

這是我的電話是什麼樣子:

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

這個答案真的取決於你使用的Spring Batch的版本。

如果您使用的是2.0.x或更高版本,則可以使用Spring Batch Admin爲啓動/停止/ etc作業提供REST端點。您只需將jar添加到您的應用程序並提供少量配置即可。

如果您使用的是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()); 
    } 
} 

上面的代碼假設你有一個以上的工作,提供執行能力。如果不是的話,你可以只用@AutowireJob本身進入你的控制器,如果你想(而不是JobRegistry)。

您可以在這裏的春天閱讀更多關於REST服務:https://spring.io/guides/gs/rest-service/

你可以閱讀更多關於JobLauncher這裏:http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/core/launch/JobLauncher.html

最後,你可以閱讀更多關於此節4.6.2 JobRegistryhttp://docs.spring.io/spring-batch/reference/html/configureJob.html