如何在Spring批处理中重试tasklet?

时间:2013-09-18 04:57:36

标签: spring-batch

如何重试方法调用程序任务,我知道如果块任务失败,则可以选择重试,并且可以选择设置退避策略,但是在方法调用程序任务xsd中我找不到重试选项。如果失败,还有其他替代方法可以重试任务。

2 个答案:

答案 0 :(得分:3)

您可以使用弹簧重试和declarative retry;只需应用<aop:config>标签并配置拦截器。

  

要更改策略或侦听器,您只需要注入一个   RetryTemplate实例进入拦截器

答案 1 :(得分:0)

当我有一个REST调用无法读取数据时,我需要重试。春天的重试不会重试读者失败。解决方案基本上是@Luca所说的使用RetryTemplate和aop。

<bean id="retryAdvice"
    class="org.springframework.retry.interceptor.RetryOperationsInterceptor">
    <property name="retryOperations">
        <bean class="org.springframework.retry.support.RetryTemplate">
            <property name="retryPolicy">
                <bean class="org.springframework.retry.policy.SimpleRetryPolicy">
                    <property name="maxAttempts" value="5" />
                </bean>
            </property>
            <property name="backOffPolicy">
                <bean class="org.springframework.retry.backoff.ExponentialBackOffPolicy">
                    <property name="initialInterval" value="3000"></property>
                    <property name="maxInterval" value="60000"></property>
                </bean>
            </property>
        </bean>
    </property>
</bean>
<aop:config>
    <aop:pointcut
        expression="execution(* com.mypackage.MyService.get*(..))"
        id="remoteMethodPointCut"></aop:pointcut>
    <aop:advisor pointcut-ref="remoteMethodPointCut"
        advice-ref="retryAdvice" />
</aop:config>