ファイルをリモートパスからローカルにプールし、いくつかのジョブを処理してから、ローカルファイルとリモートファイルの両方を削除するようにSpring SFTPを構成しました。
以下の構成は正常に動作しますが、ローカル ファイルの削除を除き、ローカル ファイルを削除するための構成が見つかりませんでした。delete-remote-files="true"
<bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory"
p:host="${sftp.host}"
p:port="${sftp.port}"
p:user="${sftp.username}"
p:password="${sftp.password}"
p:allowUnknownKeys="${sftp.allowUnknownKeys}" />
<int:channel id="sftpChannel">
<int:queue />
</int:channel>
<int-sftp:inbound-channel-adapter
id="sftpInboundAdapter"
channel="sftpChannel"
session-factory="sftpSessionFactory"
remote-directory="${sftp.remotedir}"
local-directory="${sftp.localdir}"
auto-create-local-directory="true"
delete-remote-files="true"
filename-pattern="*.TXT">
</int-sftp:inbound-channel-adapter>
<int:poller default="true" fixed-rate="${quartz.pick.repeatInterval}" max-messages-per-poll="${sftp.msg.per.poll}">
<int:transactional synchronization-factory="syncFactory" />
</int:poller>
<int:transaction-synchronization-factory id="syncFactory">
<int:after-rollback expression="@acceptOnceFilter.remove(payload)"/>
</int:transaction-synchronization-factory>
<bean id="acceptOnceFilter" class="org.springframework.integration.file.filters.AcceptOnceFileListFilter"/>
<int:service-activator input-channel="sftpChannel" ref="msgHandler" method="handleMessage"/>
<bean id="transactionManager" class="org.springframework.integration.transaction.PseudoTransactionManager"/>
<bean id="fileNameGenerator" class="org.springframework.integration.file.DefaultFileNameGenerator" />
ここでは、ファイルがリモートからローカルに転送されたときに、サービス アクティベーターが呼び出されます。
Service Activator がジョブを完了したときにローカル ファイルを削除するように構成するにはどうすればよいですか?
編集: リモートとローカルの両方からのペイロードの削除は、以下の変更で解決されます:
<int:transaction-synchronization-factory id="syncFactory">
<int:after-commit expression="payload.delete()" channel="nullChannel"/>
<int:after-rollback expression="@acceptOnceFilter.remove(payload)"/>
</int:transaction-synchronization-factory>