Spring boot 使用相应的消息头键值设置SFTP配置属性值
我需要根据提供的配置连接SFTP服务器。配置将发生变化,并在标题中提供适当的密钥。我想从键中获取值,以设置各自的bean属性值,如下所述。我已经做了更改,但它显示“未知主机异常”,有人能帮我吗Spring boot 使用相应的消息头键值设置SFTP配置属性值,spring-boot,spring-integration,Spring Boot,Spring Integration,我需要根据提供的配置连接SFTP服务器。配置将发生变化,并在标题中提供适当的密钥。我想从键中获取值,以设置各自的bean属性值,如下所述。我已经做了更改,但它显示“未知主机异常”,有人能帮我吗 <bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory"> <p
<bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="allowUnknownKeys" value="true" />
<property name="host" value="headers['SFTP_SERVER']" />
<property name="privateKey"
value="headers['SFTP_KEY']" />
<property name="privateKeyPassphrase" value="" />
<property name="port" value="headers['SFTP_PORT']" />
<property name="user" value="headers['SFTP_USER']" />
<property name="password" value="headers.SFTP_PASSWORD" />
</bean>
它不会按照您所看到的方式工作。这样的
sftpSessionFactory
将在应用程序启动期间仅创建一次,并且这些类似SpEL的属性值在此阶段不会带来任何价值:只是没有任何可交互的消息。请了解什么是Spring中的bean以及它们是如何初始化的:
基于标题的用例的唯一解决方案可以通过DelegatingSessionFactory
和自定义SessionFactoryLocator
来完成,您可以在其中动态创建DefaultSftpSessionFactory
的实例。当然,您可以将它们缓存在那里,因为不同的消息可能会在它们的头中带来相同的属性值。不要忘记在线程本地
中存储一些键
:
/**
* Set a key to be used for {@link #getSession()} on this thread.
* @param key the key.
*/
public void setThreadKey(Object key) {
this.threadKey.set(key);
}
否则,DelegatingSessionFactory
将无法工作
查看文档中的更多信息:为什么使用
spring集成aws
标签?另一方面,我在spring集成sftp
中也看不到原因。。。我想知道我们是否可以删除它们…有关如何按需动态创建适配器的示例,请参阅。