java - 将Jsch放入连接池详解

标签 java multithreading spring jsch apache-commons-pool

我将 Jsch 放入 commons-pool(带有 spring pool 支持)并取得初步成功

http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#aop-ts-pool

但是:

  1. 我们应该在 session 中合并 channel 而不是合并 session 吗?每个 Jsch session 创建一个线程。合并 Jsch session 将创建 x 个线程。 Pooling channels,真的只有一个Jsch线程。

  2. (commons-pool) 如果 Jsch session 过时会发生什么?如何在 commons-pool 的上下文中或使用 spring pool 支持重新生成 session ?如何检测它是否变质?

谢谢

最佳答案

想出了我自己的问题。我将在接下来的一两天内分享我的项目。

  1. 汇集 channel 更加有效。确实不需要创建多个 session (如果 session 连接到同一个 sftp 端点)。

  2. 我用 spring pool 和 commons-pool 实现了一个 JSch 连接池(池 channel )。我将在接下来的一两天内发布到 github。最重要的问题是,如果连接失效怎么办。

我发现基于我对 1 个 session 的实现 - 多个 channel ,如果连接失效,池化对象(在本例中为 channel )将失效。池中的对象应该失效并从池中删除。当连接恢复时,当新的应用程序线程从池中“借用”时,将创建新的池对象。

为了验证我的观察,我的非自动化测试:

a) 创建一组(比如 10 个)应用程序线程,从池中 check out channel 资源。 b) 让线程 hibernate 20 秒 c) 创建另一组应用程序线程,从池中 check out channel 资源。

a),当i==7时设置断点,通过"iptable drop (linux) or pfctl -e; pfctl -f/etc/pf.conf (mac, google how to do!)"断开连接。第一组应用程序线程将出现异常,因为 channel 已损坏。

在b),重启连接

在 c),第二组应用程序线程将成功完成操作,因为断开的连接已恢复。

关于java - 将Jsch放入连接池详解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711993/

相关文章:

java - SQLite 使用连接提交批处理 Java

java - Java 对象锁定和监视器创建如何在 JVM 内部发生

java - 将参数传递给 TestNG 运行 - Gradle

java - Thymeleaf - 在 JAVA 中传递模型

java - NetBeans 7.0 是否内置了对 spring 3.0 的支持?

java - onresume 后 ViewPager 中的 fragment 为空

java - Jtable保留列宽

java - 我可以使用selenium网格在node.json中指定webdriver.gecko.driver吗?

multithreading - 如何正确终止阻塞的线程(Lparallel Common Lisp)

c++ - thread::hardware_concurrency() 作为模板参数