使用 Spring Inbound Adapter Integration 时如何检查 SFTP 连接是否成功

How to check whether the SFTP connection is successful or not when using Spring Integration for Inbound Adapter

我正在使用 Spring 集成将 xml 文件从 SFTP 传输到本地。 我使用了 Spring 社区提供的代码。

主要Class文件

public class SFTPMain {
  public static void main(String[] args) {
    ConfigurableApplicationContext context =
        new ClassPathXmlApplicationContext("/SftpInboundReceiveSample-context.xml", SftpInboundReceiveSample.class);
    SftpInboundReceiveSample sftp = context.getBean("sftpService", SftpInboundReceiveSample.class);
    sftp.setContext(context);
    try {
        sftp.receiveFile();
    } catch (Exception e) {
        System.out.println(e);
     } finally {
         context.close();
    }
}
}

服务Class

@Component("sftpService")
public class SftpInboundReceiveSample {

public ConfigurableApplicationContext getContext() {
    return context;
}
public void setContext(ConfigurableApplicationContext context) {
    this.context = context;
}

ConfigurableApplicationContext context;

public void receiveFile(){
    try {
        PollableChannel localFileChannel = context.getBean("receiveChannel", PollableChannel.class);
        SourcePollingChannelAdapter adapter = context.getBean(SourcePollingChannelAdapter.class);       
        adapter.start();
        System.out.println("Adapter started...");
        Message<?> received = localFileChannel.receive();
        System.out.println("Received first file message: " + received);
        MessageHeaders header= received.getHeaders();
        header.getTimestamp();

    }
    finally {
    }
}
}

XML 文件

<?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"
    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.xsd">

<import resource="SftpSampleCommon.xml" />

<bean id="sftpSessionFactory"
    class="org.springframework.integration.file.remote.session.CachingSessionFactory">
    <constructor-arg ref="defaultSftpSessionFactory" />
</bean>

<bean id="defaultSftpSessionFactory"
        class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <property name="host" value="${sftp.host}"/>
    <property name="password" value="${sftp.password}"/>
    <property name="port" value="${sftp.port}"/>
    <property name="user" value="${sftp.username}"/>
</bean>

<int-sftp:inbound-channel-adapter id="sftpInbondAdapter"
    session-factory="sftpSessionFactory" channel="receiveChannel"
    filename-pattern="*" remote-directory="/loblawln"
    local-directory="D:/local-dir"
    auto-create-local-directory="true" temporary-file-suffix=".writing"
    delete-remote-files="false">
    <int:poller fixed-rate="1000" max-messages-per-poll="1" />
</int-sftp:inbound-channel-adapter>

<int:channel id="receiveChannel">
    <int:queue />
</int:channel>
</beans>

还想知道轮询是否是强制性的,因为我将通过 CRON 作业使用适配器,每天只对 SFTP 服务器执行一次 ping 操作。

首先<poller>也支持cron。所以,我看不出有什么理由再介绍一些 CRON job.

从另一边看,<poller> 也有 error-channel 选项。有了它,您可以捕获轮询流程中的任何问题,包括 SFTP 连接错误。