处理平面文件阅读器中的错误

时间:2016-03-30 20:20:03

标签: spring-batch

(我刚接触到春季批评抱歉愚蠢的问题,但谷歌没有向我展示一个例子)

我有一份批处理工作,每天午夜由石英开始。作业尝试读取一个或多个平面文件并处理它们。有时,作业读取的文件不是它需要的位置。所以得到FileNotFoundException。我们希望通过电子邮件向生产支持团队发送所需数据文件不可用的信息。

我认为以下几行是在弹簧片中执行此操作的首选方法。我是正确还是有更好的方法。我的notifyProdSupLister应该在batch:chunk语句吗?

<batch:step id="readDataFileStep" next="processDataFileStep">
        <batch:listeners>
              <batch:listner ref="notifyProdSupListner"/>
        </batch:listeners>
        <batch:tasklet .....>
            <batch:chunk reader="stagedDataReader" processor="extractProcessor"
                writer="extractOutputWriter" commit-interval="1">
                <batch:listeners>
                    <batch:listener ref="chunkListener" />
                </batch:listeners>
            </batch:chunk>
        </batch:tasklet>
    </batch:step>

我假设我的列表器看起来像 包com.mkyong.listeners;

public class notifyProdSupListner implements ItemReadListener<Domain> {

@Override
public void onReadError(Exception ex) {
    if (ex instanceof FileNotFoundException) {
        //mail support group
    }

}

}

2 个答案:

答案 0 :(得分:1)

在FlatFileItemReader中(我希望你正在使用它)如果你不想在没有源的情况下失败,你可以设置property strict = false。对于你的情况,你可以保持它为真(这是默认值,它将抛出你可以通过afterJob中的JobExecutionListener捕获的IllegalStateException。你将获得JobExecution,你可以从中获取getAllFailureExceptions()并检查它是否因为文件不存在。然后做你想做的事情来处理它。

答案 1 :(得分:0)

我发现我想做的事情不可能那样做。我有作业启动器,除非有输入文件且可读,否则作业启动器不会启动作业。

虽然如果阅读文件时出现问题,ItemReadListener将允许我执行操作。因为没有输入文件,启动器将从未在第一时间开始工作