3

Spring SFTP ドキュメント ( http://docs.spring.io/spring-integration/reference/html/sftp.html ) を読んでも、正常に転送されたファイルの再ダウンロードを防止できるかどうかは完全にはわかりません。

転送中のファイルはサイズが大きく、ローカル タスクによって処理された後、削除される可能性があります。

ただし、Spring SFTP は、それらが (実行時または再起動時に) 削除されたことを検出し、再ダウンロードしています。

私はすでにSftpPersistentAcceptOnceFileListFilter再起動を乗り切るために を使用しています。

上記の説明は、ファイルを取得する前にファイルをフィルタリングすることを指しています。ファイルが取得されると、ファイル システム上のファイルに追加のフィルタが適用されます。デフォルトでは、これはAcceptOnceFileListFilter前述のように状態をメモリに保持し、ファイルの変更時刻を考慮しない です。アプリケーションが処理後にファイルを削除しない限り、アダプターはアプリケーションの再始動後にデフォルトでディスク上のファイルを再処理します。

また、FtpPersistentAcceptOnceFileListFilter を使用するようにフィルターを構成し、リモート ファイルのタイムスタンプが変更された (再フェッチされる) 場合、デフォルトのローカル フィルターはこの新しいファイルの処理を許可しません。

local-filter 属性を使用して、ローカル ファイル システム フィルタの動作を設定します。これらの特定のユース ケースを解決するには、代わりに FileSystemPersistentAcceptOnceFileListFilter をローカル フィルターとして使用できます。このフィルターは、承認されたファイル名と変更されたタイムスタンプを戦略のインスタンスMetadataStore(セクション 9.5「メタデータストア」) に保存し、ローカルファイルの変更時刻の変更を検出します。

このことから、ローカルファイルが削除されていることが言及されているため、何をすべきかわかりません。

これが私の関連する設定です:

<int-sftp:inbound-channel-adapter id="sftpInboundAdapter"
        auto-startup="true" channel="receiveChannel" session-factory="sftpSessionFactory"
        local-directory="file:local-dir" remote-directory="files"
        auto-create-local-directory="true" delete-remote-files="false"
        filter="compositeFilter">
        <int:poller fixed-rate="1000" max-messages-per-poll="1" />
    </int-sftp:inbound-channel-adapter>

<bean id="compositeFilter"
        class="org.springframework.integration.file.filters.CompositeFileListFilter">
        <constructor-arg>
            <list>
                <bean
                    class="org.springframework.integration.sftp.filters.SftpSimplePatternFileListFilter">
                    <constructor-arg value="*.zip" />
                </bean>
                <bean
                    class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
                    <constructor-arg name="store" ref="metadataStore" />
                    <constructor-arg value="foo/bar" />
                </bean>
            </list>
        </constructor-arg>
    </bean>
4

1 に答える 1

0

構成で質問を編集してくださいSftpPersistentAcceptOnceFileListFilter。ファイルのタイムスタンプが変更されない限り、ファイルが再ダウンロードされるのを防ぐ必要があります。

F[] files = session.list(remoteDirectory);
if (!ObjectUtils.isEmpty(files)) {
    List<F> filteredFiles = filterFiles(files);
    for (F file : filteredFiles) {
        try {
            if (file != null) {
                copyFileToLocalDirectory(
                        remoteDirectory, file, localDirectory,
                        session);
            }
        }
...
于 2016-05-05T17:23:13.340 に答える