es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El oyente de omisión de salto no se llama en Spring Batch.

Tengo un paso con gestión de omisiones personalizada.
He definido una política de omisión cuyo código fuente es el siguiente:

public class CustomSkipPolicy implements SkipPolicy {

@Override
public boolean shouldSkip(Throwable throwable, int skipCount) throws SkipLimitExceededException {
        return true;
}

}

Mi Listener de omisión es el siguiente:

@Component
public class JoueurSkipListener implements SkipListener<object, object=””> {

@Autowired
private LogImportRejetRepository logImportRejetRepository;

@Override
public void onSkipInRead(Throwable throwable) {

    saveLogImportRejet(Optional.empty(), throwable);
}

@Override
public void onSkipInWrite(Object deltaObject, Throwable throwable) {
    saveLogImportRejet(Optional.of(deltaObject), throwable);
}

@Override
public void onSkipInProcess(Object deltaObject, Throwable throwable) {
    saveLogImportRejet(Optional.of(deltaObject), throwable);
}



private void saveLogImportRejet(Optional<object> deltaObject, Throwable throwable){

    LogImportRejet logImportRejet = LogImportRejet.builder()
            .createTime(OffsetDateTime.now())
            .typeImport(TypeImportEnum.JOUEUR)
            .motifRejet(throwable.getLocalizedMessage())
            .ligne(deltaObject.isPresent() ? deltaObject.get().toString(): null)
            .build();
    logImportRejetRepository.save(logImportRejet);
}

}

Mi definición de paso es la siguiente:

@Bean
public Step stepImportJoueur(@Qualifier(“joueurReader”) ItemReader joueurReader, @Qualifier(“joueurWriter”) ItemWriter joueurWriter, @Qualifier(“joueurProcessor”) JoueurProcessor joueurProcessor,
@Qualifier(“joueurSkipListener”) SkipListener joueurSkipListener) {
SimpleStepBuilder<ijoueurfed, joueur=””> builder = stepBuilderFactory.get(“stepImportJoueur”)
.<ijoueurfed, joueur=””>chunk(chunkSize)
.reader(joueurReader)
.processor(joueurProcessor)
.writer(joueurWriter)
.faultTolerant()
.retryLimit(retryLimit)
.retry(ConnectTimeoutException.class)
.retry(DeadlockLoserDataAccessException.class)
.skipPolicy(new CustomSkipPolicy());
return builder.listener(joueurSkipListener).build();
}

Tengo una excepción de violación de restricción que quiero omitir. Pero, el listener ni la política de omisión no se llaman.</ijoueurfed,></ijoueurfed,></object,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puede haber varias razones por las cuales la política de salto y el oyente de salto no funcionan como se esperaba:

    1. Asegúrese de que la excepción que desea saltar sea en efecto una javax.validation.ConstraintViolationException. Si es un tipo de excepción diferente, es posible que la política de salto no se active.
    2. Verifique que no se haya superado el límite de saltos. Si el número de saltos supera el límite de saltos, se lanzará SkipLimitExceededException y no se llamará a la política de salto.

    3. Asegúrese de que los beans del oyente y de la política de salto estén definidos correctamente como componentes de Spring y de que se estén inyectando en la definición del paso. Además, compruebe que la ortografía y el nombre de los beans del oyente y de la política de salto sean correctos.

    4. Verifique que el oyente de salto se esté ejecutando en el mismo hilo que el paso. Si el oyente de salto se está ejecutando en un hilo diferente, no se le notificarán los saltos que ocurran durante la ejecución del paso.

    5. Asegúrese de que el método shouldSkip() de la política de salto devuelva true para la excepción específica que desea saltar. Si devuelve false, el salto no ocurrirá.

    Al abordar estos problemas potenciales, es posible que pueda resolver el problema y hacer que la política y el oyente de salto funcionen correctamente.

Comments are closed.