标准Java的RMI设置我所知道的有三种方式,其中第1、2种不区分框架均适用,但影响整个JVM级别的RMI服务

1. 启动时设置sun.rmi.transport.tcp.responseTimeout,单位是毫秒

java -Dsun.rmi.transport.tcp.responseTimeout=50

2.在应用程序中设置环境变量sun.rmi.transport.tcp.responseTimeout

System.setProperty("sun.rmi.transport.tcp.responseTimeout", "5000")  单位也是毫秒

3.自定义socketfactory,具体用法参照官方这个指南

http://docs.oracle.com/javase/1.4.2/docs/guide/rmi/socketfactory/index.html

在Spring中,前面两种都能生效,第三种有些地方需要注意

1. 在server端设置自定义的socket factory

2.需要设置的是clientSocketFactory和serverSocketFactory这两个属性,而不是registryClientSocketFactory和registryServerSocketFactory,而且这两个属性要不全部设置,要不全部不设置,不能只设置一个

3.自定义的socketfactory必须实现Serializable接口(最好同时重写hashCode和equals方法)

具体用法如下:

server端配置

RMICustomClientSocketFactory.java

public class RMICustomClientSocketFactory implements RMIClientSocketFactory, Serializable {

/**

*

*/

private static final long serialVersionUID = 2879181835011310833L;

private int timeout;

/**

* 设置超时时间

*

* @param timeout

*/

public void setTimeout(int timeout) {

this.timeout = timeout;

}

@Override

public Socket createSocket(String host, int port) throws IOException {

Socket socket = new Socket();

socket.setSoTimeout(timeout);

socket.setSoLinger(false, 0);

socket.setKeepAlive(false);

socket.connect(new InetSocketAddress(host, port), timeout);

return socket;

}

}

RMICustomServerSocketFactory.java

public class RMICustomServerSocketFactory implements RMIServerSocketFactory,Serializable {

/**

*

*/

private static final long serialVersionUID = 8357061901854965297L;

private int timeout = 17;

public void setTimeout(int timeout) {

this.timeout = timeout;

}

@Override

public ServerSocket createServerSocket(int port) throws IOException {

ServerSocket serverSocket = new ServerSocket(port);

serverSocket.setSoTimeout(timeout);

return serverSocket;

}

}

在2.5.6和3.1.2中测试通过,另外在client端设置超时无效

标准Java的RMI设置我所知道的有三种方式,其中第1、2种不区分框架均适用,但影响整个JVM级别的RMI服务

1. 启动时设置sun.rmi.transport.tcp.responseTimeout,单位是毫秒

java -Dsun.rmi.transport.tcp.responseTimeout=50

2.在应用程序中设置环境变量sun.rmi.transport.tcp.responseTimeout

System.setProperty("sun.rmi.transport.tcp.responseTimeout", "5000")  单位也是毫秒

3.自定义socketfactory,具体用法参照官方这个指南

http://docs.oracle.com/javase/1.4.2/docs/guide/rmi/socketfactory/index.html

在Spring中,前面两种都能生效,第三种有些地方需要注意

1. 在server端设置自定义的socket factory

2.需要设置的是clientSocketFactory和serverSocketFactory这两个属性,而不是registryClientSocketFactory和registryServerSocketFactory,而且这两个属性要不全部设置,要不全部不设置,不能只设置一个

3.自定义的socketfactory必须实现Serializable接口(最好同时重写hashCode和equals方法)

具体用法如下:

server端配置

RMICustomClientSocketFactory.java

public class RMICustomClientSocketFactory implements RMIClientSocketFactory, Serializable {

/**

*

*/

private static final long serialVersionUID = 2879181835011310833L;

private int timeout;

/**

* 设置超时时间

*

* @param timeout

*/

public void setTimeout(int timeout) {

this.timeout = timeout;

}

@Override

public Socket createSocket(String host, int port) throws IOException {

Socket socket = new Socket();

socket.setSoTimeout(timeout);

socket.setSoLinger(false, 0);

socket.setKeepAlive(false);

socket.connect(new InetSocketAddress(host, port), timeout);

return socket;

}

}

RMICustomServerSocketFactory.java

public class RMICustomServerSocketFactory implements RMIServerSocketFactory,Serializable {

/**

*

*/

private static final long serialVersionUID = 8357061901854965297L;

private int timeout = 17;

public void setTimeout(int timeout) {

this.timeout = timeout;

}

@Override

public ServerSocket createServerSocket(int port) throws IOException {

ServerSocket serverSocket = new ServerSocket(port);

serverSocket.setSoTimeout(timeout);

return serverSocket;

}

}

在2.5.6和3.1.2中测试通过,另外在client端设置超时无效

java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园相关推荐

  1. java 设置组件所有字体_一次性设定Java程序所有组件字体及主题对字体的影响 | 学步园...

    转自:http://blog.csdn.net/LoveVV99/archive/2005/10/20/510241.aspx 用Java写程序时,希望能够设置各个控件的字体,一个个地设定各个控件的字 ...

  2. rtsp端口号_设置RTSP, RTP和RTCP端口号 | 学步园

    1.设置RTSP端口号 设置RTSP端口号的处理位于ARTSPConnection.cpp文件中,首先从url中获取端口号,如果读取不到,则设置为默认端口554.代码处理如下: ARTSPConnec ...

  3. java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!

    点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...

  4. java调用接口失败重试,httpclient接口测试中重试控制器设置

    本人在使用httpclient做接口测试的过程中,之前并没有考虑到请求失败自动重试的情况,但有时又需要在发生某些错误的时候重试,比如超时,比如响应频繁被拒绝等等,在看过官方的示例后,自己写了一个自动重 ...

  5. java calendar 月 加一_JAVA Calendar设置时间,月份总是加1 | 学步园

    代码: Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, month-1 ); calendar.set ...

  6. java配置jndi连接数_JavaWeb:Tomcat下配置数据源(JNDI)连接数据库 | 学步园

    ---------------------------------------------------------------------------------------------------- ...

  7. java线程interrupt用法_Java线程中interrupt那点事 | 学步园

    1.先看一下例子程序: import java.io.IOException; import java.net.ServerSocket; import javax.rmi.CORBA.Tie; /* ...

  8. java图像膨胀_java实现的图像腐蚀、膨胀运算 | 学步园

    这几天研究图像处理过程接触的腐蚀膨胀操作,要找个java源码参考都比较困难,所以自己写了java实现代码,并添加了阈值判断功能.可以手动修改结构元素以或者局部小改动得到不同的效果.欢迎交流指正!(PS ...

  9. java对jna的配置选项_JNA编程之一:入门 | 学步园

    好了,一堆废话后还是要进入主题,所谓JNA就是"Java Native Access"的缩写.说白了就是Java直接访问/调用本地动态库.最好的入门方法就是从JNA的官网开始. 0 ...

最新文章

  1. LSJ_NHibernate第三章 IDAL,DAL,BLL
  2. 9个技巧让你的PyTorch模型训练变得飞快!
  3. linux网络编程面试题,完美收官!字节4面斩下2-2Offer
  4. 对话阿里云李飞飞:下一代企业级数据库6大技术方向
  5. gcp devops_将GCP AI平台笔记本用作可重现的数据科学环境
  6. 访问tomcat服务器文件路径,外置tomcat映射服务器路径以及springboot内置tomcat映射路径配置...
  7. linux和安卓交互,Android中webview和js之间的交互及注意事项
  8. MySQL 8.0 异步复制的三种方式
  9. Vue学习笔记之15-vue-router详解
  10. 编译ffmpeg:no match insn: lbu $r16,0($r5)
  11. fatal error: alsa/asoundlib.h: 没有那个文件或目录
  12. 计算机硬盘存贮量单位,硬盘存储计量单位KB、MB、GB大小换算
  13. 苹果手机Safri浏览器 js 解析问题
  14. 计算机科学与技术b类大学名单,双一流a类大学和b类大学名单及学科
  15. PNAS:整合抑郁症的分子、细胞和皮层神经影像特征
  16. 计算机控制台win10,Win10系统打开Windows控制台的方法
  17. 永恒之蓝勒索漏洞复现
  18. 爬取女朋友用我淘宝已购买的宝贝数据,发现了她特殊的秘密...
  19. 墨刀教程:如何快速制作一个App首页原型?
  20. java异常排列方式_java中排序报:Comparison method violates its general contract异常的解决...

热门文章

  1. 从 0 到 300,Instagram 创始人 CTO 分享工程团队成长的经验
  2. android动画文档,Android 动画系统汇总
  3. docker Harbor2.3.4 https 搭建镜像仓库
  4. 解决Maven打包(编译)慢的问题
  5. linux环境下redis5.0的安装配置
  6. EditPlus连接远程Linux虚拟机
  7. Android 控件 - Button
  8. Leetcode 206.反转链表(双指针迭代法和递归操作)
  9. android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...
  10. 猫眼java开发暑期实习_校招|猫眼 Android日常实习一面面经