当前位置: 首页 > 面试题库 >

Spring Batch-TaskletStep中的可跳过异常

於功
2023-03-14
问题内容

BatchStatus.FAILED如果发生某些异常,我试图使工作没有。

这些文档讨论的是skippable-exception- classes在内部使用<chunk>,但是如何在内部使用TaskletStep呢?以下代码不起作用:

<batch:step id="sendEmailStep">
    <batch:tasklet>
        <bean class="com.myproject.SendEmail" scope="step" autowire="byType">
            <batch:skippable-exception-classes>
                <batch:include class="org.springframework.mail.MailException" />
            </batch:skippable-exception-classes>
        </bean>
    </batch:tasklet>
</batch:step>

问题答案:

正如Michael Minella建议的那样,我在Tasklet中实现了此功能:

abstract class SkippableTasklet implements Tasklet {

    //Exceptions that should not cause job status to be BatchStatus.FAILED
    private List<Class<?>> skippableExceptions;

    public void setSkippableExceptions(List<Class<?>> skippableExceptions) {
        this.skippableExceptions = skippableExceptions;
    }

    private boolean isSkippable(Exception e) {
        if (skippableExceptions == null) {
            return false;
        }

        for (Class<?> c : skippableExceptions) {
            if (e.getClass().isAssignableFrom(c)) {
                return true;
            }
        }
        return true;
    }

    protected abstract void run(JobParameters jobParameters) throws Exception;

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext)
            throws Exception {

        StepExecution stepExecution = chunkContext.getStepContext().getStepExecution();
        JobExecution jobExecution = stepExecution.getJobExecution();
        JobParameters jobParameters = jobExecution.getJobParameters();

        try {
            run(prj);
        } catch (Exception e) {
            if (!isSkippable(e)) {
                throw e;
            } else {
                jobExecution.addFailureException(e);
            }
        }

        return RepeatStatus.FINISHED;
    }
}

以Spring XML配置为例SkippableTasklet

<batch:tasklet>
    <bean class="com.MySkippableTasklet" scope="step" autowire="byType">
        <property name="skippableExceptions">
            <list>
                <value>org.springframework.mail.MailException</value>
            </list>
        </property>
    </bean>
</batch:tasklet>


 类似资料:
  • 问题内容: 我有一个SOAP服务,如果我为XML元素指定了错误的输入,则请求和响应可以按预期的方式在良好的输入下工作 在请求正文中: 我的异常解析器被调用,这个解析器只是异常解析器的一个实现,因此它没有异常映射,抽象方法中只有几个System.out 但是,如果我发送的请求看起来像这样: 我的解析器根本没有执行 我将log4j设置为具有根调试级别,然后看到以下输出: 2010-08-09 10:3

  • 问题内容: 您能否指出我跳过JavaScript中可选参数的好方法。 例如,我想在这里丢弃所有参数: 问题答案: 解: 您应该使用而不是要跳过的可选参数,因为这100%会模拟JavaScript中可选参数的默认值。 小例子: 强烈建议 :如果您有很多参数,请使用JSON,并且可以在参数列表的中间包含可选参数。看看这是如何在jQuery中完成的。

  • 主要内容:面向读者,前提条件,问题反馈Spring Batch是一个轻量级框架,用于在开发企业应用程序中批处理应用程序。 本教程解释了Spring Batch的基本概念,并展示了如何在实际环境中使用它。 面向读者 本教程对于那些需要处理大量涉及诸如事务管理,作业处理统计,资源管理等重复操作的记录的专业人员来说尤其有用。Spring Batch是处理大容量的非常有效的框架 批量作业。 前提条件 Spring Batch建立在Spring

  • 我想用3个步骤建立一个批次。我想配置这个步骤,就像如果有100条记录,当step1读取、处理和写入一个10块时,step02,然后step03开始和结束,然后再次返回step1,读取下一个块。这在Spring批量可能吗?

  • 我尝试了在这里和其他地方找到的多个例子,但它总是无法满足我的需要。 我的R脚本只是一个配置验证脚本,它会检查以确保用户的环境设置正确。因此,我想尝试5个不同的步骤,并报告每个步骤的状态,以便用户可以立即修复所有问题。例如,我的第一步测试与数据库的连接,如果失败,我想打印一条消息并继续执行步骤2。但它总是在出错时停止执行,所以我只会遇到失败,然后就再也没有了。 我正在使用RScript从命令行运行脚