Spring Integration SftpOutboundChannelAdapter - 如何在运行时传入ftp参数

时间:2016-07-30 02:57:25

标签: spring-integration sftp spring-integration-sftp

我需要使用Spring集成的sftp适配器构建一个独立的api,但调用者将传入sftp连接参数(host,user,pwd等),因此我无法在spring上下文xml中初始化它们。我正在寻找有关最佳方法的建议,需要拆除并在每次调用时重新创建应用程序上下文。这是我的上下文xml,我想将DefaultSftpSessionFactory参数外部化。

<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'"      />       

1 个答案:

答案 0 :(得分:0)

请参阅dynamic ftp sample app

它使用动态路由器为每个新目标创建一个新的迷你(参数化)应用程序上下文,并缓存它们以供重用。

非常简单;该示例使用XML;如果您更喜欢Java配置,this answerits follow-up对入站邮件适配器使用类似的技术。

如果您因某些原因不想使用此技术,则另一种选择是将DelegatingSessionFactory与自定义SessionFactoryLocator一起使用,以便动态创建会话工厂。