【问题标题】:Exception handling in reader of spring batch spring bootSpring Batch Spring Boot Reader 中的异常处理
【发布时间】:2015-11-21 12:27:57
【问题描述】:

我正在使用阅读器从春季批处理中的 db 表中读取数据。

如果表不存在,我想处理JdbcSQLException 并记录错误。我试图在阅读器中捕捉异常,但我无法捕捉到异常。我应该在哪里抓到它?

【问题讨论】:

    标签: spring spring-boot spring-batch


    【解决方案1】:

    使用JobExecutionDecider 检查表是否存在。
    如果表不存在,则记录错误并移至作业结束,否则正常继续作业。

    【讨论】:

    • 我可以在作业启动器中捕获异常并记录它吗?
    • 你可以试试,但如果你想要一个清晰的工作流程,我的解决方案更简单直接
    【解决方案2】:

    您可以在您的阅读器上声明ItemReadListener:

    <batch:step>
        <batch:tasklet>
            <batch:chunk reader="reader" writer="writer" />
            <batch:listeners merge="true">
                <batch:listener>
                    <bean class="xx.xx.xx.YourListener"/>
                </batch:listener>
            </batch:listeners>
        </batch:tasklet>    
    </batch:step>
    

    在这个监听器中,您可以使用 3 种方法:

    public class YourListener<T> implements ItemReadListener<T> {
    
        @Override
        public void beforeRead() {}
    
        @Override
        public void afterRead(T item) {}
    
        @Override
        public void onReadError(Exception ex) {}
    
    }
    

    现在,对于您的情况,您需要检查方法 onReadError 中的异常类型:

    @Override
    public void onReadError(Exception ex) {
    
         if (ex instanceof JdbcSQLException) {
             // Do your thing
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2012-06-16
      • 1970-01-01
      • 2019-01-10
      • 2015-02-23
      • 2016-09-29
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多