2016-09-02 54 views
2

我想通過SFTP使用SFTP出站網關到get一個文件,但我只找到使用XML配置的示例。這怎麼用Java配置來完成?如何使用Java Config配置SFTP出站網關?

更新(感謝阿爾喬姆比蘭的幫助)

MyConfiguration類:

@Configuration 
public class MyConfiguration { 

    @Bean 
    public SessionFactory<LsEntry> sftpSessionFactory() { 
     DefaultSftpSessionFactory sftpSessionFactory = new DefaultSftpSessionFactory(); 
     sftpSessionFactory.setHost("myhost"); 
     sftpSessionFactory.setPort(22); 
     sftpSessionFactory.setUser("uname"); 
     sftpSessionFactory.setPassword("pass"); 
     sftpSessionFactory.setAllowUnknownKeys(true); 
     return new CachingSessionFactory<LsEntry>(sftpSessionFactory); 
    } 

    @Bean 
    @ServiceActivator(inputChannel = "sftpChannel") 
    public MessageHandler handler() { 
     SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "get", "#getPayload() == '/home/samadmin/test.endf'"); 
     sftpOutboundGateway.setLocalDirectory(new File("C:/test/gateway/")); 
     return sftpOutboundGateway; 
    } 

} 

我的應用程序類:

@SpringBootApplication 
@EnableIntegration 
public class TestIntegrationApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(TestIntegrationApplication.class, args); 
    } 
} 

配置現在成功了,但沒有發生SFTP。需要弄清楚如何請求SFTP。

回答

3

報價Reference Manual

@Bean 
@ServiceActivator(inputChannel = "sftpChannel") 
public MessageHandler handler() { 
    return new SftpOutboundGateway(ftpSessionFactory(), "ls"); 
} 

還要注意在下一節有在Java DSL樣品。

EDIT

@Bean 
@ServiceActivator(inputChannel = "sftpChannel") 
public MessageHandler handler() { 
    SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "get", "payload"); 
    sftpOutboundGateway.setLocalDirectory(new File("C:/test/gateway/")); 
    return sftpOutboundGateway; 
} 

GET SFTP的情況下命令expression構造函數ARG也許像以上 - 只是到Message.getPayload()所有傳入消息的參考。

在這種情況下,你應該發送給sftpChannel一個Message,如:

new GenericMessage<>("/home/samadmin/test.endf"); 

所以,這/home/samadmin/test.endfMessage的​​。當它到達SftpOutboundGateway時,將針對該消息評估該表達式,並且由SpEL調用getPayload()。因此,GET命令將執行到遠程文件的所需路徑。

其他消息可能具有與其他文件完全不同的路徑。

+0

版本4.3.1中是否提供適用於SFTP出站網關的Java配置?在目前的GA(4.3.1)中,我無法找到一個構造函數,它的參數支持'new SftpOutboundGateway(sftpSessionFactory(),「ls」)''sftpSessionFactory'類型爲'SessionFactory ' – James

+0

那麼,我們有一個bug在那個文件裏。同意。但是,這是一個樣本,無論如何都是一些模板。你應該爲你的用例選擇一個合適的構造函數。我想這應該像'SftpOutboundGateway(ftpSessionFactory(),「get」,「'THE_PATH_TO_REMOTE_FILE'」)''。 –

+0

我收到'org.springframework.expression.spel.SpelParseException:EL1070E:(pos 0):嘗試創建MessageHandler bean時解析左操作數的問題。我在'@ Configuration'類中有兩個bean:'MessageHandler'和'SessionFactory '。我錯過了什麼嗎? – James

相關問題