Vinod Vinod - 1 year ago 229
Java Question

Spring integration: issue with failureChannel

I am using Spring SFTP outbound channel adapter to upload files on SFTP server with retry mechanism. In case of error in uploading, I am sending email and moving the file to error folder after certain number of retry.

Below is my configuration.

<file:inbound-channel-adapter id="csvFileChannel"
directory="${}" filename-regex="^(.*).csv"
comparator="lastModifiedComparator" prevent-duplicates="true">
<int:poller fixed-rate="5000" />

<bean id="lastModifiedComparator"
class="" />
<bean id="sftpSessionFactory"
<property name="host" value="${}" />
<property name="port" value="${sftp.port}" />
<property name="user" value="${sftp.user}" />
<property name="password" value="${sftp.password}" />

id="sftpOutboundAdapter" session-factory="sftpSessionFactory" channel="csvFileChannel"
remote-file-separator="/" remote-filename-generator-expression="payload.getName()"
remote-directory="/" mode="REPLACE">
<property name="onSuccessExpression"
value="payload.renameTo(new'${}' ," />
<property name="successChannel" ref="nullChannel" />
<property name="onFailureExpression"
value="payload.renameTo(new'${}' ," />
<property name="failureChannel" ref="failChannel" />
<property name="trapException" value="true" />
<ref bean="retryAdvice" />

<int:handler-retry-advice id="retryAdvice"
<int:fixed-back-off interval="5000" />

<int:channel id="failChannel" />

<int:chain input-channel="failChannel" output-channel="mailMessageChannel">
expression="'SFTP Upload failed for the file: ' + " />
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${}" />
<property name="port" value="${smtp.port}" />
<property name="username" value="${smtp.userName}" />
<property name="password" value="${smtp.password}" />
<property name="javaMailProperties">
<prop key="mail.smtp.auth">true</prop>

<int:channel id="mailMessageChannel" />
<int:chain input-channel="mailMessageChannel">
<int-mail:to value="${}" />
<int-mail:cc value="${}" />
<int-mail:from value="${}" />
<int-mail:subject value="SFTP Upload failed" />
mail-sender="mailSender" />

The problem I am facing is that I am getting 2 e-mails for each file. Not able to figure out the issue.

Here is spring-integration logs: spring-integration.logs

Answer Source

According to your logs, we have two files from the source dir:

2016-09-28 22:14:34,595 [DEBUG] [org.springframework.integration.file.FileReadingMessageSource] Added to queue: [D:\CSVFiles\MyCustomerTarget_20160928221429.csv, D:\CSVFiles\MyOrderTarget_20160928221429.csv]

Maybe that confuses you a bit since both of them finish with the same suffix?

Both of these files are failed to be transferred to FTP therefore there are two email about errors. One for each file.

There is no more extra email sending according your logs.

No, I got 2 mails for each file. So, in total 4 mails as there are 2 files.

Well, let's take a look to your config one more time!

<int-mail:to value="${}" />
<int-mail:cc value="${}" />

That doesn't send me two copies via GMail, but that doesn't mean that other Mail servers won't pass it like two emails to the same recipient.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download