Spring Batch Integration,在JobInstanceAlreadyCompleteException的情况下发送电子邮件

时间:2015-07-16 18:16:45

标签: spring-batch spring-integration

我想在下面的代码/配置中放置一个钩子,以便能够发现JobInstanceAlreadyCompleteException,然后通过电子邮件向生产支持团队发送此消息。

我在Spring Batch中尝试过JobExecutionListener#beforeJob()方法,但JobInstanceAlreadyCompleteException在作业执行之前就已经发生了。

我正在使用文档中的Spring Batch Integration配置:

<int:channel id="inboundFileChannel"/>
<int:channel id="outboundJobRequestChannel"/>
<int:channel id="jobLaunchReplyChannel"/>

<int-file:inbound-channel-adapter id="filePoller"
    channel="inboundFileChannel"
    directory="file:/tmp/myfiles/"
    filename-pattern="*.csv">
<int:poller fixed-rate="1000"/>

</int-file:inbound-channel-adapter>

<int:transformer input-channel="inboundFileChannel"
    output-channel="outboundJobRequestChannel">
    <bean class="io.spring.sbi.FileMessageToJobRequest">
       <property name="job" ref="personJob"/>
       <property name="fileParameterName" value="input.file.name"/>
    </bean>
</int:transformer>

如果出现与作业参数相同的CSV文件名,我想处理JobInstanceAlreadyCompleteException。我是否延长org.springframework.integration.handler.LoggingHandler

我注意到该类正在报告错误:

ERROR org.springframework.integration.handler.LoggingHandler - org.springframework.messaging.MessageHandlingException: org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException: A job instance already exists and is complete for parameters={input.file.name=C:\Users\csv\file2015.csv}.  If you want to run this job again, change the parameters.

1 个答案:

答案 0 :(得分:0)

ERROR org.springframework.integration.handler.LoggingHandler是通过您errorChannel<poller>的默认<int-file:inbound-channel-adapter>完成的。

因此,要手动处理,您只需指定自己的error-channel即可继续发送电子邮件:

<int-file:inbound-channel-adapter>
    <int:poller fixed-rate="1000" error-channel="sendErrorToEmailChannel"/>
</int-file:inbound-channel-adapter>

<int-mail:outbound-channel-adapter id="sendErrorToEmailChannel"/>

当然,在通过电子邮件发送ti之前,您必须进行一些ErrorMessage转换,但这已经是目标业务逻辑实现的详细信息。