Установка значения свойства конфигурации SFTP с использованием соответствующего значения ключа заголовка сообщения - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть одно требование для подключения SFTP-сервера в зависимости от предоставленной конфигурации.Конфигурация будет изменяться, и в заголовках она указана с соответствующим ключом.Я хочу получить значения из ключа, чтобы установить соответствующее значение свойства бина, как указано ниже.Я внес изменения, но они показывают «Неизвестное исключение хоста». Может кто-нибудь помочь мне в этом?

<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>

1 Ответ

0 голосов
/ 28 февраля 2019

Это не сработает так, как вы это видите.Такое sftpSessionFactory <bean> будет создано только один раз во время запуска приложения, и эти значения свойств, подобные SpEL, не приносят никакого значения на этом этапе: просто нет сообщений для взаимодействия.Пожалуйста, узнайте, что такое bean-компоненты в Spring и как они инициализируются: https://docs.spring.io/spring/docs/5.1.5.RELEASE/spring-framework-reference/core.html#spring-core

Единственное решение для вашего варианта использования на основе заголовков может быть выполнено через DelegatingSessionFactory и пользовательские SessionFactoryLocator, где вы создаетеэкземпляр DefaultSftpSessionFactory на лету.Конечно, вы можете кэшировать их там, потому что разные сообщения могут содержать одинаковые значения свойств в своих заголовках.Не забудьте сохранить key в ThreadLocal:

/**
 * 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 не будет работать.

См. Дополнительную информацию в Документах: https://docs.spring.io/spring-integration/docs/current/reference/html/#sftp-dsf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...