如何在运行Job时将运行时参数传递给Itemreader

时间:2018-09-05 13:23:28

标签: spring-batch

我正在使用Rabbit-messaging Queue和Spring批处理结合使用。生产者服务将消息发布到队列中。在这里,我的代码是使用者,我正在使用Spring Batch对其进行读取,处理和写入。在这里,当消息被推送到队列时,我必须触发作业(意味着没有控制器端点)。为此,我使用 @RabbitListener(“ queue_Name),它将在发布新消息时也进行监听,并且也接收消息。下面是代码。

@EnableRabbit
public class Eventscheduler {

    @Autowired
    Job csvJob;

    @Autowired
    private JobLauncher jobLauncher;

    //@Scheduled(cron="0 */5 * ? * *")
    @RabbitListener(queues ="BulkSolve_GeneralrequestQueue")
    public void trigger(){
        Reader.batchstatus=false;
        Map<String,JobParameter> maps= new HashMap<String,JobParameter>();

        maps.put("time", new JobParameter(System.currentTimeMillis()));
        JobParameters jobParameters = new JobParameters(maps);
        JobExecution execution=null;
        try {
            //JobLauncher jobLauncher = new JobLauncher();
             execution=jobLauncher.run(csvJob, jobParameters);
        } catch (JobExecutionAlreadyRunningException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JobRestartException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JobInstanceAlreadyCompleteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JobParametersInvalidException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("JOB Executed:" + execution.getStatus());

    }

}

这是我的问题在这里,我已经在阅读已发布的消息,然后如何将消息pojo传递给ItemReader?在触发job.SO之前,我的ItemReader将读取该消息。谁能帮助我指导如何实现这一目标?

谢谢

1 个答案:

答案 0 :(得分:0)

RabbitListener注释的Javadoc中,您的注释方法可以将消息作为参数。例如:

@RabbitListener(queues ="BulkSolve_GeneralrequestQueue")
public void trigger(Message message){
    // use message as needed
}

然后您可以访问收到的消息并将其用作作业的输入。