リモートFTPにファイルがあります。たとえば、 "abc.txt"です。このファイルは1分ごとに更新されます。同じファイルを1分ごとに取得するようにFTP Inbound Channel Adapterを設定しました。Spring統合の古いローカルファイルを置き換える方法FTPインバウンドチャネルアダプタ
これは初めて正常に動作します(つまり、ローカルディレクトリはまだ空です)。ただし、2回目以降の中間ファイルabc.txt.writing
は、元のabc.txt
ファイルを置き換えることはできません。つまり、abc.txt
(旧バージョン)とabc.txt.writing
の両方が同じディレクトリに共存することになります。 (新しいバージョンのデータ)。 (エラープロンプトなし)
私はバグを打つか、古いバージョンのファイルを最初に削除してabc.txt.writing
が正常に名前を変更できるようにパラメータを設定する必要があります。 FileWritingMessageHandler
<bean id="ftpSessionFactory"
class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory"
p:host="127.0.0.1"
p:port="21"
p:username="myusername"
p:password="mypassword">
<bean id="cachingSessionFactory" class="org.springframework.integration.file.remote.session.CachingSessionFactory">
<constructor-arg ref="ftpSessionFactory" />
<constructor-arg value="1" />
<property name="sessionWaitTimeout" value="1000" />
</bean>
<int-ftp:inbound-channel-adapter id="myChannel"
channel="nullChannel"
session-factory="cachingSessionFactory"
filename-pattern="abc.txt"
remote-directory="/"
preserve-timestamp="true"
local-directory="c:/temp">
<int:poller cron="15 * * * * ?" max-messages-per-poll="1" />
</int-ftp:inbound-channel-adapter>
c:\temp> dir /a
06/23/2017 11:44 AM 840,000 abc.txt
06/23/2017 11:45 AM 840,000 abc.txt.writing
'int-ftp:inbound-channel-adapter'の代わりに' int-ftp:outbound-channel-adapter'を使うのはどうですか? 'int-ftp:outbound-channel-adapter'には、あなたが望むものを得るための' mode = "REPLACE"という属性があります。条件は、バネ統合バージョン4.1以上を使用する必要があるということです。 –
SI 4.3.10を使用しています。私はFTPからファイルをダウンロードして、下流のコンポーネントでローカルに処理しています(上記のコードスニペットで下流コンポーネントのプロセスコードを投稿しませんでした)。この場合、FTP Outbound Channel Adapterは役に立ちません。 – user3544765
おそらく、下流のコードが古いファイルを使用中のままにしているため、名前の変更操作が成功しない可能性があります。また、そのダウンストリーム処理でファイルを削除することもできます。 –