Spring Batch retry-politique, et passez-la question de la politique de
J'ai, après l'étape de traitement par lots.
<batch:step id="parse-step">
<batch:tasklet>
<batch:chunk reader="xmlCommonReader"
processor="xmlCommonProcessor"
writer="xmlCommonWriter"
commit-interval="1">
<batch:skip-policy>
<bean class="org.springframework.batch.core.step.skip.AlwaysSkipItemSkipPolicy" scope="step"/>
</batch:skip-policy>
<batch:retry-policy>
<bean class="org.springframework.retry.policy.NeverRetryPolicy" scope="step"/>
</batch:retry-policy>
</batch:chunk>
</batch:tasklet>
<batch:next on="FAILED" to="file-failed-step"/>
<batch:next on="COMPLETED" to="file-success-step"/>
<batch:listeners>
<batch:listener ref="parseStepExecutionListener"/>
<batch:listener ref="parseStepSkipListener"/>
</batch:listeners>
</batch:step>
Lorsque certains exception jette, je l'attraper en parseStepSkipListener et journal dans la base de données.
J'attends le comportement suivant:
- Travail Commencé
- L'exécution des étapes précédentes
- Lancer l'exécution de analyser étape
- Lire l'article
- Élément de processus
- Écrire
- Ooooops, d'exception.
- Exception de Catch, ouvrez une session dans la base de données, passez à la partie suivante(Lire, Processus d'Écriture).
- Continuer à mettre en œuvre d'autres mesures.
- Terminer le travail.
Mais en fait, je reçois comportement suivant:
- Travail Commencé
- L'exécution des étapes précédentes
- Lancer l'exécution de analyser étape
- Lire l'article
- Élément de processus
- Écrire
- Ooooops, d'exception.
- Élément de processus
- Écrire élément
- Ooooops, d'exception.
- Exception de Catch, ouvrez une session dans la base de données, passez à la partie suivante(Lire, Processus d'Écriture).
- Continuer à mettre en œuvre d'autres mesures.
- Terminer le travail.
Ainsi, un bloc de données essayer de processus et d'écrire deux fois.
OriginalL'auteur Ruslan | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
En quelques mots:
Cela arrive parce que quand une erreur s'est produite dans l'écriture de l'étape SB ne sais pas quel est l'objet qui a provoqué l'exception si une annulation est effectuée et chaque élément de la dernière uncommited morceau est transformé ou écrits à nouveau comme un mini-bloc à détecter l'objet qui en est la cause principale erreur d'écriture.
Vous pouvez en lire plus (avec schémas) ici
Je pense réessayer signifie "essayer à nouveau d'écrire morceau si un ensemble particulier d'exceptions s'est produite" (réessayer " 6.Écrivez point " d'après la logique de nouvelle tentative) et non pas "n'essayez pas de détecter l'article qui a été la source d'une erreur d'écriture" (ignorer 6.1 et suivants points)
Ok, je vais essayer de jouer avec skip et logique de nouvelle tentative.
Ok, j'accepte de répondre.
OriginalL'auteur Luca Basso Ricci