Konfigurieren von Spring Batch RetryPolicy für chunks in job.xml Datei

Habe ich so konfiguriert das gleiche wie unten. Aber immer Ausnahmen (siehe später), Bitte um Hilfe.
Der Zweck, dies zu tun, ist zu erreichen, neu zu starten, Schritte auf Fehler.

========================================
Die retryPolicyJob.xml

<batch:job id="retryPolicyJob" job-repository="jobRepository">
    <batch:step id="retryPolicyStep">
        <batch:tasklet>
            <batch:chunk reader="ConnectionRetryReader" writer="CustomItemWriter" commit-interval="100"
                retry-policy="retryPolicy" />
        </batch:tasklet>
    </batch:step>
</batch:job>

<bean id="ConnectionRetryReader" class="spring.batch.examples.retry.ConnectionRetryReader"/>
<bean id="CustomItemWriter" class="spring.batch.examples.retry.CustomItemWriter"/>

<bean id="retryPolicy"
    class="org.springframework.batch.retry.policy.ExceptionClassifierRetryPolicy">
    <property name="policyMap">
        <map>
            <entry key="org.springframework.dao.ConcurrencyFailureException">
                <bean class="org.springframework.batch.retry.policy.SimpleRetryPolicy">
                    <property name="maxAttempts" value="2" />
                </bean>
            </entry>
            <entry key="org.springframework.dao.DeadlockLoserDataAccessException">
                <bean class="org.springframework.batch.retry.policy.SimpleRetryPolicy">
                    <property name="maxAttempts" value="3" />
                </bean>
            </entry>
        </map>
    </property>
</bean>

=============================================
Die Reader-Klasse-code :

public class ConnectionRetryReader<T> implements ItemReader<T>, ItemStream {

    private int retryCount = 0;
    private T t;
    int currentIndex = 0;
    private static final String CURRENT_INDEX = "current.index";

    public T read() throws Exception, UnexpectedInputException, ParseException,
            NonTransientResourceException, ConnectionFailureException,
            ResourceNotAvailableException {
        retryCount++;
        System.out.println("In Retry " + retryCount);
        if (retryCount == 2) {
            System.out.println("throwing ConcurrencyFailureException");
            throw new org.springframework.dao.ConcurrencyFailureException(
                    "ConcurrencyFailureException thrown", new Exception());
        }
        System.out.println("throwing DeadlockLoserDataAccessException");
        throw new org.springframework.dao.DeadlockLoserDataAccessException(
                "DeadlockLoserDataAccessException thrown", new Exception());
    }

    public void open(ExecutionContext executionContext)
            throws ItemStreamException {
        if (executionContext.containsKey(CURRENT_INDEX)) {
            currentIndex = new Long(executionContext.getLong(CURRENT_INDEX))
                    .intValue();
        } else {
            currentIndex = 0;
        }
    }

    public void update(ExecutionContext executionContext)
            throws ItemStreamException {
        executionContext.putLong(CURRENT_INDEX,
                new Long(currentIndex).longValue());

    }

    public void close() throws ItemStreamException {
        //TODO Auto-generated method stub

    }

}

====================================================
Die Ausnahmemeldung:

17:22:40,140 INFO main SimpleJobLauncher:179 - Keine TaskExecutor festgelegt wurde, standardmäßig auf synchrone Testamentsvollstrecker. 
17:22:40,546 INFO main SimpleJobLauncher:118 - Job: [FlowJob: [name=retryPolicyJob]] gestartet mit den folgenden Parametern: [{}] 
17:22:40,577 INFO main SimpleStepHandler:133 - Durchführung von Schritt: [retryPolicyStep] 
In Retry 1 
werfen DeadlockLoserDataAccessException 
17:22:40,640 FEHLER main AbstractStep:212 - hat einen Fehler bei der Ausführung des Schritt 
org.springframework.batch.core.Schritt.überspringen.NonSkippableReadException: Nicht-überspringbare-Ausnahme beim Lesen 
bei org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:104) 
bei org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInIteration(SimpleChunkProvider.java:108) 
bei org.springframework.batch.wiederholen Sie.Unterstützung.RepeatTemplate.getNextResult(RepeatTemplate.java:367) 
bei org.springframework.batch.wiederholen Sie.Unterstützung.RepeatTemplate.executeInternal(RepeatTemplate.java:214) 
bei org.springframework.batch.wiederholen Sie.Unterstützung.RepeatTemplate.iterate(RepeatTemplate.java:143) 
bei org.springframework.batch.core.Schritt.Element.SimpleChunkProvider.bieten(SimpleChunkProvider.java:103) 
bei org.springframework.batch.core.Schritt.Element.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:68) 
bei org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:386) 
bei org.springframework.die Transaktion.Unterstützung.TransactionTemplate.execute(TransactionTemplate.java:130) 
bei org.springframework.batch.core.Schritt.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:264) 
bei org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:76) 
bei org.springframework.batch.wiederholen Sie.Unterstützung.RepeatTemplate.getNextResult(RepeatTemplate.java:367) 
bei org.springframework.batch.wiederholen Sie.Unterstützung.RepeatTemplate.executeInternal(RepeatTemplate.java:214) 
bei org.springframework.batch.wiederholen Sie.Unterstützung.RepeatTemplate.iterate(RepeatTemplate.java:143) 
bei org.springframework.batch.core.Schritt.tasklet.TaskletStep.doExecute(TaskletStep.java:250) 
bei org.springframework.batch.core.Schritt.AbstractStep.execute(AbstractStep.java:195) 
bei org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:135) 
bei org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:61) 
bei org.springframework.batch.core.job.flow.Unterstützung.Zustand.StepState.Griff(StepState.java:60) 
bei org.springframework.batch.core.job.flow.Unterstützung.SimpleFlow.Lebenslauf(SimpleFlow.java:144) 
bei org.springframework.batch.core.job.flow.Unterstützung.SimpleFlow.start(SimpleFlow.java:124) 
bei org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135) 
bei org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:281) 
bei org.springframework.batch.core.starten.Unterstützung.SimpleJobLauncher$1.run(SimpleJobLauncher.java:120) 
bei org.springframework.core.Aufgabe.SyncTaskExecutor.execute(SyncTaskExecutor.java:48) 
bei org.springframework.batch.core.starten.Unterstützung.SimpleJobLauncher.run(SimpleJobLauncher.java:114) 
bei org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:349) 
bei org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:574) 
bei spring.batch.Beispiele.wiederholen Sie den Vorgang.RetryTestCommandLine.main(RetryTestCommandLine.java:9) 
Verursacht durch: org.springframework.dao.DeadlockLoserDataAccessException: DeadlockLoserDataAccessException geworfen; nested exception is java.lang.Ausnahme 
bei spring.batch.Beispiele.wiederholen Sie den Vorgang.ConnectionRetryReader.Lesen(ConnectionRetryReader.java:30) 
bei org.springframework.batch.core.Schritt.Element.SimpleChunkProvider.doRead(SimpleChunkProvider.java:90) 
bei org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:87) 
28 mehr ... 
Verursacht durch: java.lang.Ausnahme 
bei spring.batch.Beispiele.wiederholen Sie den Vorgang.ConnectionRetryReader.Lesen(ConnectionRetryReader.java:31) 
... 30 mehr 
17:22:40,655 INFO main SimpleJobLauncher:121 - Job: [FlowJob: [name=retryPolicyJob]] abgeschlossen mit den folgenden Parametern: [{}] und den folgenden status haben: [FEHLGESCHLAGEN] 
InformationsquelleAutor Saikat Sur | 2012-05-30
Schreibe einen Kommentar