当前位置: 首页 > 知识库问答 >
问题:

如何在spring sftp入站通道适配器中配置委托会话工厂

长孙智刚
2023-03-14
<beans>
<bean id="defaultSftpSessionFactoryOne" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <property name="host" value="**.***.**.***" />
    <property name="port" value="**" />
    <property name="user" value="######" />
    <property name="password" value="######" />
    <property name="allowUnknownKeys" value="true" />
</bean>

<bean id="defaultSftpSessionFactoryTwo"     class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <property name="host" value="**.***.**.***" />
    <property name="port" value="**" />
    <property name="user" value="######" />
    <property name="password" value="######" />
    <property name="allowUnknownKeys" value="true" />
</bean>

<bean id="delegatingSessionFactory"     class="org.springframework.integration.file.remote.session.DelegatingSessionFactory">
    <constructor-arg>
        <bean id="factoryLocator"
            class="org.springframework.integration.file.remote.session.DefaultSessionFactoryLocator">
            <constructor-arg name="factories">
                <map>
                    <entry key="one" value-ref="defaultSftpSessionFactoryOne"></entry>
                    <entry key="two" value-ref="defaultSftpSessionFactoryTwo"></entry>
                </map>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>

<int:channel id="receiveChannel" />

<int-sftp:inbound-channel-adapter id="sftpInbondAdapter" auto-startup="false"
    channel="receiveChannel" session-factory="delegatingSessionFactory"
    local-directory="C:\\Users\\sftp" remote-directory="/tmp/archive"
    auto-create-local-directory="true" delete-remote-files="false"
    filename-regex=".*\.txt$">
    <int:poller cron="0/10 * * * * ?">
    </int:poller>
</int-sftp:inbound-channel-adapter>
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
DelegatingSessionFactory<String> dsf = (DelegatingSessionFactory<String>) ac.getBean("delegatingSessionFactory");
SessionFactory<String> one = dsf.getFactoryLocator().getSessionFactory("one");
SessionFactory<String> two = dsf.getFactoryLocator().getSessionFactory("two");
dsf.setThreadKey("two");
SourcePollingChannelAdapter spca = (SourcePollingChannelAdapter) ac.getBean("sftpInbondAdapter");
spca.start();

共有1个答案

史英飙
2023-03-14

委派会话工厂实际上是为出站适配器和网关设计的。通常,入站适配器不会切换到不同的服务器。

main线程上这样设置thread键不会产生任何影响。

您需要在调用适配器的线程上设置/清除键;文档中显示了出站适配器的情况。

 类似资料:
  • 我发现了一个xml配置的入站适配器示例,但我并不完全理解。配置指定REST请求设置请求方法、使用的格式等。 我认为,从Spring集成的角度来看,响应应该更加重要,因为响应实际上是为消息通道提供信息的。我说得对吗? HTTP入站适配器用作消息endpoint(实际上是消息起始点),它调用HTTP请求,例如REST服务的URL。”http://myRest/transfer/next“-向SI消息通

  • 如何通过注释而不是常规配置文件配置入站通道适配器?我可以为会话工厂定义bean,如下所示: 如何配置通过注释下给出的入站通道适配器? 我正在寻找的是在应用程序启动时连接所有bean,然后公开一些方法来开始轮询服务器,处理它们,然后从本地删除它们,类似于 其中getPollableChannel()为我提供了用于轮询的bean。

  • 如果我创建一个SFTP入站通道适配器,并使用在SFTP中配置为channel属性的通道发送一些文件。文件将传输到SFTP远程目录本地目录,还是直接从通道流到本地目录

  • 问题内容: Spring Integration FTP中的入站通道适配器和出站通道适配器之间有什么区别?我应该使用哪一个?何时使用? 我从文档中了解到,出站可以发送任何类型的文件(例如byte [],String,java.io.File),但入站仅限于文件类型。那仅仅是区别还是其他? 问题答案: 我建议您首先阅读理论 。 任何Inbound适配器都旨在从外部系统获取数据。Outbound-放置

  • 问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更