会话工厂委托
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 会话缓存)时,每个委托都应被缓存。您不能缓存 `DelegatingSessionFactory` 本身。 |
从 5.0.7 版本开始,`DelegatingSessionFactory` 可以与 `RotatingServerAdvice` 结合使用来轮询多个服务器;参见 入站通道适配器:轮询多个服务器和目录。