Spring Integration Sftp 文件传送
目前在国内项目开发中,使用Spring Integration技术的比较少,尤其是中文的参考文献和项目案例,更是罕有。鉴于此,本文详细介绍spring integration sftp模块在Sftp服务器和本地服务器之间文件的传送。
SFTP(Secure File Transfer Protocol) 安全文件传送协议,允许文件通过流的形式在网络之间进行传输。文件传输的过程涉及到两个重要的因素,安全渠道(secure channel,如SSH)以及SFTP联接身份的识别(SFTP session)。Spring Integration提供三种方式来支持文件在SFTP服务器的发送和接收:Inbound Channel Adapter,Outbound Channel Adapter,Outbound Gateway。
几个概念:
- SFTP Session Factory
在配置SFTP adapters之前,需要配置SFTP Session Factory;Spring Integration提供了如下xml和spring boot的定义方式。
每次使用 SFTP adapter,都需要Session Factory会话对象,一般情况,都会创建一个新的SFTP会话。同时还提供了Session的缓存功能。Spring integration中的Session Factory是依赖于JSch库来提供。
JSch支持在一个连接配置上多个channel的操作。原生的JSch技术开发,在打开一个channel操作之前,需要建立Session的连接。同样的,默认情况,Spring Integration为每一个channel操作使用单独的物理连接。在3.0版本发布之后,Cache Session Factory 出现 (CachingSessionFactory),将Session Factory包装在缓存中,支持Session共享,可以在一个连接上支持多个JSch Channel的操作。如果缓存被重置,在最后一次channel关闭之后,才会断开连接。

下面是XML方式定义的Session Factory的bean:
<beans:bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<beans:property name="host" value="localhost"/>
<beans:property name="privateKey" value="classpath:META-INF/keys/sftpTest"/>
<beans:property name="privateKeyPassphrase" value="springIntegration"/>
<beans:property name="port" value="22"/>
<beans:property name="user" value="songhj"/>
</beans:bean>
下面是使用springboot方式定义的Session Factory:
@Bean
public SessionFactory<LsEntry> sftpSessionFactory(){
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setUser("songhj");
factory.setHost("127.0.0.1");
factory.setPort("22");
factory.setPassword("password");
return factory;
}
- SFTP Session Caching
在3.0之前的版本中,会话默认情况下是自动缓存的。可以使用cache-sessions属性禁用自动缓存,但是该解决方案没有提供配置其他会话缓存属性的方法。例如,您不能限制缓存会话的数量。
3.0版本之后,提供了一个CachingSessionFactory。它提供了sessionCacheSize和sessionWaitTimeout属性。控制缓存中维护多少活动会话(默认情况下是无界的)。如果已经达到了sessionCacheSize阈值,那么任何获取另一个会话的尝试都将被阻塞,直到其中一个缓存会话可用,或者直到会话的等待时间过期(默认等待时间是Integer.MAX_VALUE)。sessionWaitTimeout属性启用该值的配置。缓存会话,然后将其包装在CachingSessionFactory的实例中。
<bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="lo

最低0.47元/天 解锁文章
40

被折叠的 条评论
为什么被折叠?



