2017-09-18 1 views
0

J'ai besoin dans mon projet quelle exception se produisent dans ItemProccesor besoin de stocker Exception dans le contexte JobExecution et à la fin de JobExecution envoyer du courrier pour les enregistrements Exceptional mais comment obtenir l'objet JobExecution dans processListner? J'ai essayé d'utiliser @beforestep dans processListner mais l'objet JobExecution était nulle est-il un moyen d'obtenir contexte JobExecution dans le processus ListnerSpring Batch Comment faire pour obtenir l'objet JobExecution dans Process Listner

Répondre

0

Je suis solution dans le lot de printemps pour question ci-dessus, doivent préciser jobscope dans auditeur de processus et le contexte de l'exécution du travail d'accès dans le code de la classe listner est mentionnée ci-dessous.

@Bean 
    @JobScope 
    public CaliberatedProcessorListener calibratedProcessorListener() { 

     return new CaliberatedProcessorListener(); 
    } 
public class CaliberatedProcessorListener <T, S> implements ItemProcessListener<T, S> { 

    @Value("#{jobExecution}") 
    public JobExecution jobExecution; 

    @Override 
    public void beforeProcess(T calibratedProessorInPut) { 

     // // do nothing 
    } 

    @Override 
    public void afterProcess(T calibratedProessorInput, S calibratedProessorOutPut) { 

     // do nothing 
    } 

    @Override 
    public void onProcessError(T item, Exception calibratedProcessorEx) { 

     FtpEmailData ftpEmailData = (FtpEmailData) jobExecution.getExecutionContext().get("calDeviceBatchInfo"); 
     ftpEmailData.getExceptionList().add(new CalibratedDeviceException(calibratedProcessorEx.getMessage())); 
    } 

}