Spring boot 使用相应的消息头键值设置SFTP配置属性值

Spring boot 使用相应的消息头键值设置SFTP配置属性值,spring-boot,spring-integration,Spring Boot,Spring Integration,我需要根据提供的配置连接SFTP服务器。配置将发生变化,并在标题中提供适当的密钥。我想从键中获取值,以设置各自的bean属性值,如下所述。我已经做了更改,但它显示“未知主机异常”,有人能帮我吗 <bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory"> <p

我需要根据提供的配置连接SFTP服务器。配置将发生变化,并在标题中提供适当的密钥。我想从键中获取值,以设置各自的bean属性值,如下所述。我已经做了更改,但它显示“未知主机异常”,有人能帮我吗

<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
中也看不到原因。。。我想知道我们是否可以删除它们…有关如何按需动态创建适配器的示例,请参阅。