2017-11-08 2 views
1

reqDataフォームをMy Controllerクラスに渡したいと思っています。同じステップを達成する方法はありますか?私はコントローラーで復活したHttpRequestDataのオブジェクトを持っています。おかげコントローラのオブジェクトをSpring Batchのステップに渡す方法

HttpRequestController.java以下

package com.npst.imps.controller; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.batch.core.Job; 
import org.springframework.batch.core.JobExecution; 
import org.springframework.batch.core.JobParameters; 
import org.springframework.batch.core.JobParametersBuilder; 
import org.springframework.batch.core.launch.JobLauncher; 
import org.springframework.batch.item.ExecutionContext; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 
import com.npst.imps.utils.HttpRequestData; 
import com.npst.imps.utils.TransactionResponseData; 
import javax.servlet.http.HttpSession; 
@RestController 
public class HttpRequestController { 
    TransactionResponseData transactionResponseData; 
    @Autowired 
    HttpSession session; 
    JobExecution jobExecution; 
    @Autowired 
    JobLauncher jobLauncher; 
    @Autowired 
    Job fundtrans; 
    String test; 
    @RequestMapping("/impsft") 
    public String handleHttpRequest(@RequestBody HttpRequestData reqData) throws Exception { 
     Logger logger = LoggerFactory.getLogger(this.getClass()); 

     try { 
      JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters(); 
      jobExecution = jobLauncher.run(fundtrans, jobParameters); 
      ExecutionContext context= jobExecution.getExecutionContext(); 
      //context.put("reqData", reqData); 
      transactionResponseData=(TransactionResponseData) context.get("transactionData"); 
      //System.out.println(context.get("transactionResponseData")); 
     } catch (Exception e) { 
      logger.info(e.getMessage()); 
      e.printStackTrace(); 
     } 
     return reqData+" "+transactionResponseData.getMsg()+",Tid="+transactionResponseData.getTid(); 
    } 
} 

は私が内部のステップ実行オブジェクトを配置します病棟での私のステップのクラスで、ここから同じreqDataを取得したい私のステップクラス

ですdoAfterメソッド。

PrepareTransactionId.java

package com.npst.imps.action; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import javax.servlet.http.HttpSession; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.batch.core.ExitStatus; 
import org.springframework.batch.core.StepContribution; 
import org.springframework.batch.core.StepExecution; 
import org.springframework.batch.core.StepExecutionListener; 
import org.springframework.batch.core.scope.context.ChunkContext; 
import org.springframework.batch.core.step.tasklet.Tasklet; 
import org.springframework.batch.repeat.RepeatStatus; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import com.npst.imps.service.TransactionService; 
import com.npst.imps.utils.GenericTicketKey; 
import com.npst.imps.utils.HttpRequestData; 
import com.npst.imps.utils.TicketGenerator; 
import com.npst.imps.utils.TransactionResponseData; 
@Service 
public class PrepareTransactionId implements Tasklet,StepExecutionListener{ 
    static Logger logger = LoggerFactory.getLogger(PrepareTransactionId.class); 
    String appId; 
    private static TicketGenerator ticketGenerator = null; 
    private static GenericTicketKey genericTicketKey = null; 
    @Autowired 
    HttpSession session; 
    @Autowired 
    TransactionService transactionService; 
    @Override 
    public ExitStatus afterStep(StepExecution stepExecution) { 
     try { 
      DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); 
      Date date = new Date(); 
      String ticket; 
      System.out.println("transactionService:: PrepareTransactionId"+transactionService); 
      TransactionResponseData transactionData=new TransactionResponseData();  

      System.out.println("reqData::"+reqData); 
      long value=transactionService.getMaxTid(appId); 
      logger.info("Max id From db::"+value); 
      if (value == 0) { 
       value = System.currentTimeMillis()/10000; 
       long l = value; 
       ticket=l+""; 
      } 
      long l = value + 1; 
      ticketGenerator = TicketGenerator.getInstance(9999999999L, 0, l); 
      genericTicketKey = new GenericTicketKey(0, false, 10); 
      ticket = ticketGenerator.getNextEdgeTicketFor(genericTicketKey); 
      stepExecution.getJobExecution().getExecutionContext().put("ticket", ticket);  
      ticket=appId+ticket; 
      System.out.println("tid::"+ticket); 
      stepExecution.getJobExecution().getExecutionContext().put("tid", ticket); 
      stepExecution.getJobExecution().getExecutionContext().put("reqData", reqData); 
      transactionData.setMsg("Request Recived..."); 
      transactionData.setTid(ticket+""); 
      transactionData.setNodeId(appId); 
      transactionData.setReqtime(dateFormat.format(date));; 
      stepExecution.getJobExecution().getExecutionContext().put("transactionData", transactionData); 
      logger.info("Request Recived with tid::"+ticket); 
      ExitStatus exist=new ExitStatus("SUCCESS", "success"); 
      return exist.replaceExitCode("SUCCESS"); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
      return ExitStatus.FAILED; 
     } 
    } 

    public String getAppId() { 
     return appId; 
    } 

    public void setAppId(String appId) { 
     this.appId = appId; 
    } 

    @Override 
    public void beforeStep(StepExecution arg0) { 
     // TODO Auto-generated method stub 
    } 
    @Override 
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { 
     return null; 
    } 

} 

答えて

0

私は完全なHttpRequestDataを渡すために示唆されています。パスするのではなく、情報をバッチするだけです。 JobParametersを使用してこの情報を渡すことができます。

サンプルコードになりまし

JobParameters parameters = new JobParametersBuilder().addString("key1",HttpRequestData.gteData) 
                .addString("key2",HttpRequestData.gteData) 
                .addString("key3",HttpRequestData.gteData)             
                .toJobParameters(); 

ステップであなたはJobParameters

HashMap<String, JobParameter>(); 
      JobParameter myParameter = new JobParameter(your custom object); 
      map.put("myobject", myParameter); 
      JobParameters jobParameters = new JobParameters(map); 
+0

でカスタムオブジェクトを置くStepExecution

からJobParametersを得ることができるため、オブジェクト –

+0

はい、更新された答えを渡すためにどのような方法がありますJobParameterとしてオブジェクトを渡します – Niraj

+1

JobParameter myParameter = new JobParameter(reqdata); jobparameterコンストラクタでカスタムオブジェクトを渡すことを許可していません。 –

関連する問題