处理平面文件中的错误 reader
Handling errors in flat file reader
(我是 spring 批次的新手,很抱歉提出愚蠢的问题,但 google 没有给我举个例子)
我有一个批处理作业,每天午夜由 quartz 启动。该作业尝试读取一个或多个平面文件并处理它们。有时作业读取的文件不在需要的位置。所以得到 FileNotFoundException。我们想通过电子邮件通知生产支持团队所需的数据文件不可用。
我认为在 springbatch 中,以下内容是首选的方法。我是正确的还是有更好的方法。我的 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
}
}
}
我发现我想做的事情不能那样做。我有作业启动器,除非有输入文件并且它是可读的,否则作业启动器不会启动作业。
如果读取文件有问题,ItemReadListener 将允许我做一些事情。因为没有输入文件,所以启动器一开始就不会启动作业
在 FlatFileItemReader(我希望你正在使用的是它)中,如果你不想在源不存在的情况下使作业失败,你可以设置 属性 strict=false。对于您的情况,您可以保持它为真(这是默认值,它会抛出 IllegalStateException,您可以通过 afterJob 中的 JobExecutionListener 捕获它。在那里您将获得 JobExecution,您可以从中获取 getAllFailureExceptions() 并检查它是否因以下原因而失败文件不存在。然后做任何你想做的事来处理它。
(我是 spring 批次的新手,很抱歉提出愚蠢的问题,但 google 没有给我举个例子)
我有一个批处理作业,每天午夜由 quartz 启动。该作业尝试读取一个或多个平面文件并处理它们。有时作业读取的文件不在需要的位置。所以得到 FileNotFoundException。我们想通过电子邮件通知生产支持团队所需的数据文件不可用。
我认为在 springbatch 中,以下内容是首选的方法。我是正确的还是有更好的方法。我的 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
}
}
}
我发现我想做的事情不能那样做。我有作业启动器,除非有输入文件并且它是可读的,否则作业启动器不会启动作业。
如果读取文件有问题,ItemReadListener 将允许我做一些事情。因为没有输入文件,所以启动器一开始就不会启动作业
在 FlatFileItemReader(我希望你正在使用的是它)中,如果你不想在源不存在的情况下使作业失败,你可以设置 属性 strict=false。对于您的情况,您可以保持它为真(这是默认值,它会抛出 IllegalStateException,您可以通过 afterJob 中的 JobExecutionListener 捕获它。在那里您将获得 JobExecution,您可以从中获取 getAllFailureExceptions() 并检查它是否因以下原因而失败文件不存在。然后做任何你想做的事来处理它。