精华内容
下载资源
问答
  • 使用Java调用REST接口设置超时时间

    万次阅读 2018-07-02 10:25:43
    关于在Java中调用REST接口,首先来说一下JAX-RS。JAX-RS是JAVA EE6 引入的一个新技术。JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格...

    关于在Java中调用REST接口,首先来说一下JAX-RS。

    JAX-RS是JAVA EE6 引入的一个新技术。JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java注解来简化Web服务的客户端和服务端的开发和部署。

     

    Java源生JAX-RS使用方式

    Java提供的JAX-RS本身就可以实现调接口的功能,使用比较简单,但是我目前还没发现怎么设置超时时间,使用的代码如下:

    package com.util;
    import javax.ws.rs.client.Client;
    import javax.ws.rs.client.ClientBuilder;
    import javax.ws.rs.client.Entity;
    import javax.ws.rs.client.WebTarget;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;
    
    
    public class TestC {
    	
    	/**
    	 * 
    	 * @param url 请求地址
    	 * @param postParam 参数
    	 * @param mediaType 媒体类型
    	 * @return
    	 */
    	public static String post(String url, String postParam, MediaType mediaType) {
    		Client client = ClientBuilder.newClient();
    		String result = null;
    		WebTarget target = client.target(url);
    		Response response = target.request().post(Entity.entity(postParam, mediaType));
    
    		try {
    			if (response.getStatus() != 200) {
    				throw new RuntimeException("Failed with HTTP error code : " + response.getStatus());
    			}
    			result = response.readEntity(String.class);
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			response.close();
    			client.close();
    		}
    
    		return result;
    	}
    }
    

    除了Java本身的JAX-RS之外,还有很多别的框架,有的扩展了Java的JAX-RS,有的使用http连接的方式,都能实现调接口的目的,而且功能更加强大,下面举例两种,分别是Apache的HttpClient和Spring的RestTemplate,都是可以设置超时时间的。

     

    Apache的HttpClient

    使用代码如下:

    package com.util;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.CoreConnectionPNames;
    import org.apache.http.util.EntityUtils;
    
    public class TestA {
    	
    	/**
    	 * 
    	 * @param url 请求地址
    	 * @param param 参数
    	 * @param mediaType 媒体类型值
    	 * @param connectTimeout 连接超时时间,单位是毫秒,设置为0表示不限长
    	 * @param readTiemout 调用超时时间,单位是毫秒,设置为0表示不限长
    	 * @return
    	 */
    	public String postWithTimeout(String url, String param,String mediaType, int connectTimeout, int readTiemout) {
    		
    		String result = null;
    		HttpClient httpClient = new DefaultHttpClient();
    		HttpPost httpPost = new HttpPost(url);
    		try {
    			httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectTimeout);// 设置建立连接超时时间
    			httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, readTiemout);// 设置等待返回超时时间
    			StringEntity entity = new StringEntity(param);
    			entity.setContentEncoding("UTF-8");
    			entity.setContentType(mediaType);
    			httpPost.setEntity(entity);
    			HttpEntity resEntity = httpClient.execute(httpPost).getEntity();
    			result = EntityUtils.toString(resEntity, "UTF-8");
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			httpClient.getConnectionManager().shutdown();
    		}
    		return result;
    	}
    }
    

    Spring的RestTemplate

    使用代码如下:

    package com.util;
    
    import org.springframework.http.HttpEntity;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.MediaType;
    import org.springframework.http.client.SimpleClientHttpRequestFactory;
    import org.springframework.web.client.RestTemplate;
    
    
    public class TestB {
    	
    	/**
    	 * 
    	 * @param url 请求地址
    	 * @param param 参数
    	 * @param mediaType 媒体类型值
    	 * @param connectTimeout 连接超时时间,单位是毫秒,设置为0表示不限长
    	 * @param readTiemout 调用超时时间,单位是毫秒,设置为0表示不限长
    	 * @return
    	 */
    	public static String postWithTimeout(String url, String body, String mediaType, int connectTimeout, int readTiemout) {
    		SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
    		requestFactory.setConnectTimeout(connectTimeout);// 设置建立连接超时时间
    		requestFactory.setReadTimeout(readTiemout);// 设置等待返回超时时间
    		RestTemplate restTemplate = new RestTemplate(requestFactory);
    		HttpHeaders headers = new HttpHeaders();
    		MediaType type = MediaType.parseMediaType(mediaType);
    		headers.setContentType(type);
    		headers.add("Accept", "text/html,application/xhtml+xml,application/json;q=0.9,*/*;q=0.8");
    		headers.add("Content-Length", "0");
    		HttpEntity<String> formEntity = new HttpEntity<String>(body, headers);
    		String temp = restTemplate.postForObject(url, formEntity, String.class);
    		return temp;
    	}
    	
    }
    

    Spring的RestTemplate和Apache的HttpClient一样,可以设置建立连接的超时时间,和等待服务器返回的超时时间,这两个超时时间的单位都是毫秒,如果设置为0,表示没有超时时间。

    他们也都支持get,post等请求方式,比Java源生的JAX-RS功能要丰富一些

    实际上RestTemplate也是使用了HttpClient的原理,而HttpClient就是扩展自Java的JAX-RS。

     

    其他的框架如Jersey等,也可以实现以上类似的功能,这种框架有很多,可以慢慢学习。

     

     

    展开全文
  • SimpleClientHttpRequestFactory 类设置RestTemplate 超时时间 SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); //10s requestFactory.setConnectTimeout(10*1000); ...

    SimpleClientHttpRequestFactory 类设置RestTemplate 超时时间

    
     SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
            //10s
            requestFactory.setConnectTimeout(10*1000);
            requestFactory.setReadTimeout(10*1000);
            RestTemplate restTemplate=new RestTemplate(requestFactory);
            String urlString = String.format(url + "k=" + key + "&imo=" + imo + "&begin=" + i + "&end=" + r + "");
            JSONObject result = restTemplate.getForObject(urlString, JSONObject.class);
    
    
    展开全文
  • //设置超时时间超时异常处理 public static void main(String[] args) { final ExecutorService exec = Executors.newFixedThreadPool(1); Callable call = new Callable() { pub
    //设置超时时间超时异常处理
    		public static void main(String[] args) {
    			 final ExecutorService exec = Executors.newFixedThreadPool(1);  
    	          
    		        Callable<String> call = new Callable<String>() {  
    		            public String call() throws Exception {  
    		                //开始执行耗时操作  
    		                Thread.sleep(1000 * 5);  
    		                return "线程执行完成.";  
    		            }  
    		        };  
    		          
    		        try {  
    		            Future<String> future = exec.submit(call);  
    		            String obj = future.get(1000 * 6, TimeUnit.MILLISECONDS); //任务处理超时时间设为 1 秒  
    		            System.out.println("任务成功返回:" + obj);  
    		        } catch (Exception e) {  
    		            System.out.println("处理失败.");  
    		            e.printStackTrace();  
    		        }  
    		        // 关闭线程池  
    		        exec.shutdown();  
    		}

    展开全文
  • java设置接口访问超时,自动响应

    万次阅读 2018-08-31 09:56:14
    一.问题探究 前段时间在搞一个批量处理程序,涉及到多线程操作。但是后台服务很不给力,并发一大常常...那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。 可是在网上搜了大半天...

    这里写图片描述

    支持原创,人人有责【https://blog.csdn.net/a9529lty/article/details/42711029

    一.问题探究

    前段时间在搞一个批量处理程序,涉及到多线程操作。但是后台服务很不给力,并发一大常常就挂了,长时间不给返回,导致我的程序也挂死在那里……

    那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。

    可是在网上搜了大半天,找到的都是无用的代码,根本不能用。

    查了大量资料后发现,java早已经给我们提供了解决方案。jdk1.5自带的并发库中Future类就能满足这个需求。Future类中重要方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。

    到这里,此问题就迎刃而解了。废话不多说,直接上代码:

    二.代码实现

    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    
    
    import com.sun.corba.se.impl.orbutil.closure.Future;
    import com.sun.corba.se.impl.orbutil.threadpool.TimeoutException;
    public class ThreadTest {  
    
        public static void main(String[] args) throws InterruptedException,  
                ExecutionException {  
    
            final ExecutorService exec = Executors.newFixedThreadPool(1);  
    
            Callable<String> call = new Callable<String>() {  
                public String call() throws Exception {  
                    //开始执行耗时操作  
                    Thread.sleep(1000 * 5);  
                    return "线程执行完成.";  
                }  
            };  
    
            try {  
                Future<String> future = exec.submit(call);  
                String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); //任务处理超时时间设为 1 秒  
                System.out.println("任务成功返回:" + obj);  
            } catch (TimeoutException ex) {  
                System.out.println("处理超时啦....");  
                ex.printStackTrace();  
            } catch (Exception e) {  
                System.out.println("处理失败.");  
                e.printStackTrace();  
            }  
            // 关闭线程池  
            exec.shutdown();  
        }  
    }  
    展开全文
  • java中Socket设置超时时间的两种方法

    千次阅读 2021-02-21 16:28:49
    调用Socket的connct 方法打开连接,并设置连接超时时间 Socket socket = new Socket() socket.connect(new InetSocketAddress(ip, port), 3000); //设置超时3000毫秒 以上代码是设置Socket的连接超时时间,当连接...
  • 当DB压力过大时获取Connction的时间过慢长时间不返回的话, 就不连接DB了, 研究了好久,DataSource里面的setLoginTimeOut 根本没法用, 刚开始一直纠结在大google搜索"java get connection 超时"答案上, 但始终找不到...
  • Java中HttpClient设置超时时间

    千次阅读 2020-04-30 13:08:59
    CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://stackoverflow.com/"); //设置超时时间 RequestConfig requestConfig = RequestConfig.custom() ....
  • SpringCloud Gateway 关于对某一个服务接口设置超时时间的时长 本文主要是针对解决使用SpringCloud Gateway时针对不同服务的接口设置一个单独熔断时长。 当我们使用SpringCloud Gateway 我们不可能说所有的服务接口...
  • java后台请求接口超时的处理(二)

    万次阅读 2019-10-18 16:54:25
    一、前端访问后台接口设置超时时间 spring官方提供的配置:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html # SPRING MVC (WebMvcProperties) spring.mvc....
  • Java方法设置超时

    万次阅读 2017-10-17 10:14:56
    我们在开发过程中可能会遇到这样的场景:在执行一个耗时操作的时候,如果在规定的时间内处理完成了,则返回正确的结果,否则视为超时任务,这个时候我们将不再等待(不再执行)该耗时操作,直接告诉调用者:这个任务...
  • SpringBoot设置接口超时时间

    千次阅读 2020-09-28 11:37:46
    SpringBoot设置接口访问超时时间有两种方式 一、在配置文件application.properties中加了spring.mvc.async.request-timeout=20000,意思是设置超时时间为20000ms即20s, 二、还有一种就是在config配置类中加入: ...
  • Callable接口和Future接口介绍 ... 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口Java标准API的一部分,在java.util
  • hystrix设置接口级的超时时间直接进入主题 。 直接进入主题 通常我们设置的hystrix超时时间是针对整个服务的,但是有时候会遇到一些响应时间比较长的接口,我们希望针对这种接口单独设置一个比较长的超时时间,可以...
  • 之前在使用Java实现熔断降级组件的时候,需要实现接口请求的超时中断,通过查找相关资料了解了相关的方法,下面这篇文章主要给大家介绍了关于Java中实现线程的超时中断的相关资料,需要的朋友可以参考下
  • 利用AOP监控Java接口响应超时

    千次阅读 2018-10-11 20:47:06
     服务化接口是提供服务的,接口正确性、稳定性是最最重要的,在保证正确的同时需要尽量提高接口响应时间。  有的团队会有专门的工具来对系统响应时间、吞吐量做监控,但如果团队没有这种“待遇”就需要自己来做...
  • webService超时时间JAVA设置

    万次阅读 2018-02-11 11:07:41
    目前比较常用的 WebService 有两种方式:SOAP和REST,本文就以调用这两种方式的服务,介绍编程中常用的超时设置,包括 JAVA调用远程 SOAP 服务,以及利用 HttpClient(JAVA)调用 REST 服务(简单的 HTTP 服务)的...
  • Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口Java标准API的一部分,在java.util.concurrent包中。Future接口Java线程Future模式的...
  •  在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口Java标准API的一部分,在java.util.concurrent包中。Future接口Java线程Future...
  • cxf wsdl2java 生成客户端调用代码设置超时时间

    千次阅读 热门讨论 2020-03-01 10:36:34
    参考资料:... 问题描述:通过cxf的wsdl2java命令生成webservice客户端调用代码,如何设置连接超时、响应超时? 解决方案: TransferImplService ss = new TransferImplService(new URL(systemConfig....
  • Java方法的执行时间监控 设置超时(Future 接口)需求解决方案代码参考文章 需求 在【临时数据提取】项目中,存在如下需求:程序执行用户提供的sql时,如果这条sql查询的方法执行超过(从数据库配置表获取)秒,...
  • 前段时间在搞一个批量处理程序,涉及到多线程操作。...那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。 可是在网上搜了大半天,找到的都是无用的代码,根本不能用。 查了...
  • Java Webservice指定超时时间

    万次阅读 2017-09-25 23:32:35
    Java Webservice指定超时时间使用JDK对Webservice的支持进行Webservice调用时通常的操作步骤如下://1、创建一个javax.xml.ws.Service实例 javax.xml.ws.Service service = javax.xml.ws.Service.create(wsdl, ...
  • SpringBoot怎么设置接口超时时间

    千次阅读 2020-11-16 11:20:07
    SpringBoot设置接口访问超时时间有两种方式 第一个 一、在配置文件application.properties中加了spring.mvc.async.request-timeout=20000,意思是设置超时时间为20000ms即20s, 第二个 二、还有一种就是在config配置...
  • 问题:在通过restTemplate.exchange()方法调组件接口时,因为接口url有误或组件.../设置超时时间 SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory(); clientHttpReq
  • 当DB压力过大时获取Connction的时间过慢长时间不返回的话, 就不连接DB了, 研究了好久,DataSource里面的setLoginTimeOut 根本没法用, 刚开始一直纠结在大google搜索"java get connection 超时"答案上, 但始终找不到...
  • 今天在启动springboot的时候,项目启动一切正常,在调用dubbo的rpc接口的时候,发现有的接口会出现timeout异常,这个时候,我们可以调整调用段中dubbo的超时时间,在你项目application.properties中设置 dubbo....
  • Feign设置单独接口超时时间和FallBack(HystrixCommonKey) HystrixCommonKey生成方法:类名#方法名(入参类型) final class Default implements SetterFactory { @Override public HystrixCommand.Setter create...
  •  用来设置请求资源和服务器返回的时间,保证一个请求占用固定时间,超出后报504超时!这样可以保证一个请求占用过长时间。 二、主要参数  使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用fastcgi: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,688
精华内容 55,875
关键字:

java接口设置超时时间

java 订阅