2016-07-30 4 views
1

Мне нужно создать автономный api с помощью адаптера sftp Spring, но вызывающий передаст параметры подключения sftp (хост, пользователь, pwd и т. Д.) И поэтому я не могу их инициализировать в контексте xml. Я ищу совет по наилучшему способу сделать это, требуя отторжения и воссоздания контекста приложения с каждым вызовом. Вот мой контекст xml прямо сейчас, и я хотел бы экрнализировать параметры DefaultSftpSessionFactory.Spring Integration SftpOutboundChannelAdapter - как передать параметры ftp во время выполнения

<bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory"> 
    <property name="host" value="${host}" /> 
    <property name="port" value="${serverport}" /> 
    <property name="user" value="${username}" /> 
    <property name="password" value="${password}" /> 
    <property name="allowUnknownKeys" value="true" /> 
</bean> 
<int:channel id="inputChannel" /> 
<int-sftp:outbound-channel-adapter id="sftpOutboundAdapter" 
    session-factory="sftpSessionFactory" 
    channel="inputChannel" 
    charset="UTF-8" 
    remote-file-separator="/" 
    remote-directory="/accounts/12026622/Reports/" 
    use-temporary-file-name="false" 
    mode="REPLACE" 
    remote-filename-generator-expression="payload.getName() + '-foo'"  />  

ответ

0

См. dynamic ftp sample app.

Он использует динамический маршрутизатор для создания нового мини-(параметризованного) контекста приложения для каждого нового адресата и кэширует их для повторного использования.

Это довольно просто; в примере используется XML; если вы предпочитаете конфигурацию Java, this answer и its follow-up использует подобную технику для входящих адаптеров почты.

Если вы не хотите использовать этот метод по какой-либо причине, другим вариантом будет использование DelegatingSessionFactory с пользовательским SessionFactoryLocator, который создает сеансовые заводы на лету.

+0

Также см. Этот https://spring.io/blog/2016/07/08/java-dsl-for-spring-integration-1-2-m1-and-1-1-3-are-available. Теперь вы можете настроить весь поток во время выполнения. Так же, как и для FTP –

+0

Гэри - есть ли пример DelegatingSessionFactory с SessionFactoryLocator? – javakart

+0

Не то, что я знаю, но не должно быть сложно добавить хост/порт/учетные данные в заголовок сообщения и использовать их в заводском локаторе. На этой неделе я на конференции SpringOne Platform; Я мог бы создать пример на следующей неделе, если вы напомните мне, добавив здесь комментарий. –