1

我需要使用 Spring 集成的 sftp 适配器构建一个独立的 api,但是调用者将传入 sftp 连接参数(主机、用户、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'"      />       
4

1 回答 1

0

请参阅动态 ftp 示例应用程序

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

这很简单;示例使用 XML;如果您更喜欢 Java 配置,这个答案及其后续将使用类似的技术用于入站邮件适配器。

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

于 2016-07-30T14:18:42.367 回答