2013-09-24 84 views
1

如何使用SFTP適配器將文件從本地系統移動到遠程FTP。我正在通過這些示例,並提及將文件從遠程FTP複製到本地計算機。用於sftp的彈簧集成

我需要將文件從本地計算機移動到遠程系統文件夾。

<?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" /> 

我試過這個,但無法將文件移動到已處理的文件夾。

+0

你只需要'出境-channel-adapter'把文件放到SFTP。你用什麼來將你的有效載荷放到'inputChannel'上? –

+0

順便說一句,你可以看到一個例子,通過SFTP [在這裏]將文件放在遠程目錄中(https://github.com/spring-projects/spring-integration-samples/blob/master/basic/sftp/src/test /java/org/springframework/integration/samples/sftp/SftpOutboundTransferSample.java) –

+0

@Dmitry所以我只需要定義出站通道適配器?如果是的話如何配置本地文件夾需要選擇文件? – sree

回答

6

這裏是基於你的配置,我實際上檢查了工作,你可以用它作爲一個起點。

<?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> 

問題與您的配置:

  1. 您使用sftpSessionFactory作爲inbound-channel-adapter通道。它應該定義該有效載荷將被轉發到消息渠道,所以你的情況現在看來似乎應該是publishToSFTPChannel
  2. publish-subscribe-channel用來代替簡單的點至點通道
+0

感謝它爲我工作,然後我試圖將文件移動到處理文件夾,不能將文件移動到文件夾中。可以看看我的配置請。 – sree

+1

我認爲你最好每次創建另一個問題,而不是修改現有的問題。有多種方式可以處理這個問題。 'sftpChannel'現在是直接頻道,所以只有一個消費者可以使用它。例如,您可以創建分路器或路由器,以將消息發送到每個適配器的不同通道。另外,'publish-subscribe-channel'現在可能對你有用 - 你可以讀取本地文件,然後它將作爲有效負載發送到SFTP和文件出站適配器。 –