我需要使用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'" />
答案 0 :(得分:0)
它使用动态路由器为每个新目标创建一个新的迷你(参数化)应用程序上下文,并缓存它们以供重用。
非常简单;该示例使用XML;如果您更喜欢Java配置,this answer和its follow-up对入站邮件适配器使用类似的技术。
如果您因某些原因不想使用此技术,则另一种选择是将DelegatingSessionFactory与自定义SessionFactoryLocator
一起使用,以便动态创建会话工厂。