Delegating Session Factory

版本 4.2 引入了 DelegatingSessionFactory,允许在运行时选择实际会话工厂。在调用 SFTP 端点之前,可以在工厂上调用 setThreadKey() 以将键与当前线程相关联。然后使用该键查找要使用的实际会话工厂。使用后,可以通过调用 clearThreadKey() 清除该键。

我们添加了便捷方法,以便你可以更轻松地从消息流中执行此操作,如下面的示例所示:

<bean id="dsf" class="org.springframework.integration.file.remote.session.DelegatingSessionFactory">
    <constructor-arg>
        <bean class="o.s.i.file.remote.session.DefaultSessionFactoryLocator">
            <!-- delegate factories here -->
        </bean>
    </constructor-arg>
</bean>

<int:service-activator input-channel="in" output-channel="c1"
        expression="@dsf.setThreadKey(#root, headers['factoryToUse'])" />

<int-sftp:outbound-gateway request-channel="c1" reply-channel="c2" ... />

<int:service-activator input-channel="c2" output-channel="out"
        expression="@dsf.clearThreadKey(#root)" />

在使用会话缓存(参阅 SFTP Session Caching)的时候,应该缓存每个委托。您无法缓存 DelegatingSessionFactory 本身。

从5.0.7版本开始,`DelegatingSessionFactory`可以与`RotatingServerAdvice`结合使用来轮询多个服务器;请参阅Inbound Channel Adapters: Polling Multiple Servers and Directories