Spring Batch SkipListener pas appelé lorsque l'exception se produit dans le lecteur
C'est mon étape de configuration. Mon ignorer les auditeurs onSkipInWrite() la méthode est appelée correctement. Mais onSkipInRead() n'est pas appelé. J'ai trouvé cette délibérément lancer une exception de pointeur null à partir de mon lecteur.
<step id="callService" next="writeUsersAndResources">
<tasklet allow-start-if-complete="true">
<chunk reader="Reader" writer="Writer"
commit-interval="10" skip-limit="10">
<skippable-exception-classes>
<include class="java.lang.Exception" />
</skippable-exception-classes>
</chunk>
<listeners>
<listener ref="skipListener" />
</listeners>
</tasklet>
</step>
J'ai lu quelques forums et interchangeables, les auditeurs-tag à deux niveaux: à l'Intérieur du bloc, et à l'extérieur de la tasklet. Rien ne fonctionne...
L'ajout de mon ignorer Écouteur ici
package com.legal.batch.core;
import org.apache.commons.lang.StringEscapeUtils;
import org.springframework.batch.core.SkipListener;
import org.springframework.jdbc.core.JdbcTemplate;
public class SkipListener implements SkipListener<Object, Object> {
@Override
public void onSkipInProcess(Object arg0, Throwable arg1) {
//TODO Auto-generated method stub
}
@Override
public void onSkipInRead(Throwable arg0) {
}
@Override
public void onSkipInWrite(Object arg0, Throwable arg1) {
}
}
Experts s'il vous plaît suggérer
vous pouvez également poster votre "skipListener" de la fève de configuration et de mise en œuvre? Êtes-vous à la mise en œuvre de
Ajouté le branchement écouteur ici
SkipListener<T,S>
interface? Êtes-vous à l'aide de @OnSkipInRead
annotation? etc..Ajouté le branchement écouteur ici
OriginalL'auteur Shiva | 2011-10-03
Vous devez vous connecter pour publier un commentaire.
Sauter des auditeurs à l'égard de la transaction limite, ce qui signifie qu'ils ont toujours appelé juste avant la transaction est validée.
Depuis un intervalle de validation dans votre exemple est réglé sur "10", le
onSkipInRead
sera appelée au moment de commettre ces 10 éléments (à la fois).Donc, si vous essayez de faire une étape par étape de débogage, vous ne verriez pas un
onSkipInRead
appelé immédiatement après un ItemReader déclenche une exception.Un
SkipListener
dans votre exemple a un videonSkipInRead
méthode. Essayez d'ajouter quelques traces à l'intérieur deonSkipInRead
, déplacer et exécuter de nouveau votre travail pour voir ces messages.MODIFIER:
Voici un exemple de travail [noms sont changés à "abc"]:
où un
abcSkipListener
bean est:voici un exemple de travail de l'un de mes projets dans le passé. Essayez d'utiliser
@OnReadError
dans une benne à l'écoute.je vous remercie. obtenez de retour..
OriginalL'auteur tolitius