Integrasi pegas untuk sftp

Bagaimana cara memindahkan file dari sistem lokal ke FTP jarak jauh menggunakan adaptor SFTP. Saya akan melihat contoh-contohnya dan semuanya menyebutkan untuk menyalin file dari FTP jarak jauh ke mesin lokal.

Saya perlu memindahkan file dari mesin lokal ke folder sistem jarak jauh.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-sftp="http://www.springframework.org/schema/integration/sftp"
xmlns:file="http://www.springframework.org/schema/integration/file"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/integration
    http://www.springframework.org/schema/integration/spring-integration.xsd
    http://www.springframework.org/schema/integration/sftp
    http://www.springframework.org/schema/integration/sftp/spring-integration-sftp-    2.2.xsd
    http://www.springframework.org/schema/integration/file
    http://www.springframework.org/schema/integration/file/spring-integration-file-2.2.xsd">

<bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="localhost"/>
<property name="user" value="user01"/>
<property name="password" value="abc123"/>
<property name="port" value="990"/>
</bean>

<int:channel id="sftpChannel"/>

<file:inbound-channel-adapter directory="#{T(System).getProperty('java.io.tmpdir')}" id="fileInbound"
                          channel="sftpChannel" filename-pattern="*.xml">
<int:poller fixed-rate="1000" max-messages-per-poll="100"/>
</file:inbound-channel-adapter>

<int-sftp:outbound-channel-adapter id="sftpOutboundAdapter" session-factory="sftpSessionFactory"
                               channel="sftpChannel" charset="UTF-8" remote-directory="/"
                               remote-file-separator="/"/>

</beans>

<file:outbound-channel-adapter id="moveProcessedFile"
    channel="sftpChannel"
    directory="file:#{configurationService.configuration.getProperty('acal.jde.publish.folder')}/processed"
    delete-source-files="true" order="2" />

Saya mencobanya tetapi tidak dapat memindahkan file ke folder yang diproses.


person sree    schedule 24.09.2013    source sumber
comment
Anda hanya perlu outbound-channel-adapter untuk memasukkan file ke SFTP. Apa yang Anda gunakan untuk memasukkan muatan Anda ke inputChannel?   -  person Dmitry Kuskov    schedule 24.09.2013
comment
BTW, Anda sebenarnya dapat melihat contoh yang menempatkan file pada direktori jarak jauh melalui SFTP di sini   -  person Dmitry Kuskov    schedule 24.09.2013
comment
@Dmitry Jadi saya hanya perlu mendefinisikan adaptor saluran keluar? jika demikian Bagaimana cara mengkonfigurasi folder lokal di mana ia perlu mengambil file?   -  person sree    schedule 24.09.2013
comment
Anda tidak menentukan ini di outbound-channel-adapter, Anda hanya menentukan saluran input. Dan cara Anda memasukkan data ke dalam saluran ini terserah Anda: Anda dapat, misalnya, membuat rantai yang akan membaca direktori lokal dan menulis payload ke inputChannel, atau Anda dapat membaca file dan memasukkannya sebagai payload secara manual dalam pekerjaan jagung, dan banyak pilihan lainnya, Anda harus memutuskan mana yang paling cocok untuk Anda. Di tautan yang saya berikan di atas MessageChannel.send dipanggil secara eksplisit dan contoh saluran diperoleh dari konteks aplikasi - itu juga merupakan opsi.   -  person Dmitry Kuskov    schedule 24.09.2013
comment
@Dmitry Terima kasih atas masukannya. Saya menambahkan saluran dan membaca file lalu memanggil konfigurasi outbound-channel-adapter.edit di atas tetapi file tetap tidak bergerak. Bisakah Anda membantu saya.   -  person sree    schedule 24.09.2013
comment
Mengapa Anda memiliki sftpSessionFactory sebagai channel di inbound-channel-adapter? Ini harus menentukan saluran pesan ke mana payload akan diteruskan, jadi dalam kasus Anda sepertinya publishToSFTPChannel. Dan mengapa menggunakan publish-subscribe-channel? Saluran point-to-point yang sederhana sudah cukup.   -  person Dmitry Kuskov    schedule 24.09.2013


Jawaban (1)


Berikut konfigurasi berdasarkan milik Anda yang sebenarnya saya periksa berfungsi, Anda dapat menggunakannya sebagai titik awal.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:int="http://www.springframework.org/schema/integration"
   xmlns:int-sftp="http://www.springframework.org/schema/integration/sftp"
   xmlns:file="http://www.springframework.org/schema/integration/file"
   xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration
        http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/sftp
        http://www.springframework.org/schema/integration/sftp/spring-integration-sftp-2.2.xsd
        http://www.springframework.org/schema/integration/file
        http://www.springframework.org/schema/integration/file/spring-integration-file-2.2.xsd">

<bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <property name="host" value="localhost"/>
    <property name="user" value="user01"/>
    <property name="password" value="abc123"/>
    <property name="port" value="990"/>
</bean>

<int:channel id="sftpChannel"/>

<file:inbound-channel-adapter directory="#{T(System).getProperty('java.io.tmpdir')}" id="fileInbound"
                              channel="sftpChannel" filename-pattern="*.xml">
    <int:poller fixed-rate="1000" max-messages-per-poll="100"/>
</file:inbound-channel-adapter>

<int-sftp:outbound-channel-adapter id="sftpOutboundAdapter" session-factory="sftpSessionFactory"
                                   channel="sftpChannel" charset="UTF-8" remote-directory="/"
                                   remote-file-separator="/"/>

</beans>

Masalah dengan konfigurasi Anda:

  1. Anda menggunakan sftpSessionFactory sebagai saluran di inbound-channel-adapter. Ini harus menentukan saluran pesan ke mana payload akan diteruskan, jadi dalam kasus Anda sepertinya publishToSFTPChannel
  2. publish-subscribe-channel digunakan sebagai pengganti saluran point-to-point sederhana
person Dmitry Kuskov    schedule 24.09.2013
comment
Terima kasih ini berhasil untuk saya, Lalu saya mencoba memindahkan file ke folder yang diproses dan tidak dapat memindahkan file ke dalam folder. Bisakah Anda melihat konfigurasi saya. - person sree; 25.09.2013
comment
Saya pikir Anda sebaiknya membuat pertanyaan lain setiap kali dan tidak mengubah pertanyaan yang sudah ada. Ada beberapa cara untuk menangani hal ini. sftpChannel sekarang merupakan saluran langsung, jadi hanya satu konsumen yang dapat menggunakannya. Anda dapat, misalnya, membuat splitter atau router untuk mengirimkan pesan Anda ke saluran berbeda untuk setiap adaptor. Selain itu, publish-subscribe-channel mungkin sebenarnya berguna bagi Anda sekarang - Anda dapat membaca file lokal, dan kemudian akan dikirim sebagai payload ke SFTP dan adaptor file keluar. - person Dmitry Kuskov; 25.09.2013
comment
apakah int:channel id=sftpChannel sesuatu yang default atau sepertinya saya dapat memiliki int:channel id=_rd - person rd_; 07.08.2019