欢迎使用CSDN-markdown编辑器

直接上代码,效果还不错。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;

/**
 * @author Crunchify.com
 */

public class CrunchifyRetryNTimes {

    public static void main(String[] args) {

        // Execute this Program as it is once to get correct response.

        // Change URL to
        // http://crunchify.com/wp-content/uploads/code/json.sample2.txt to
        // see retry logic in action..
        String myURL = "http://www.google.om";
        CrunchifyRetryOnExceptionStrategy retry = new CrunchifyRetryOnExceptionStrategy();
        while (retry.shouldRetry()) {
            try {
                System.out.println("Requested URL:" + myURL);
                StringBuilder sb = new StringBuilder();
                URLConnection urlConn = null;
                InputStreamReader in = null;
                URL url = new URL(myURL);
                urlConn = url.openConnection();
                if (urlConn != null) urlConn.setReadTimeout(60 * 1000);
                if (urlConn != null && urlConn.getInputStream() != null) {
                    in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
                    BufferedReader bufferedReader = new BufferedReader(in);
                    if (bufferedReader != null) {
                        int cp;
                        while ((cp = bufferedReader.read()) != -1) {
                            sb.append((char) cp);
                        }
                        bufferedReader.close();
                    }
                }
                System.out.println(sb.toString());
                in.close();
                break;

            } catch (Exception e) {
                try {
                    System.out.println("in catch.....");
                    retry.errorOccured();
                } catch (RuntimeException e1) {
                    throw new RuntimeException("Exception while calling URL:" + myURL, e);
                } catch (Exception e1) {
                    throw new RuntimeException(e1);
                }
            }
        }
    }

    static class CrunchifyRetryOnExceptionStrategy {

        public static final int  DEFAULT_RETRIES            = 3;
        public static final long DEFAULT_WAIT_TIME_IN_MILLI = 2000;

        private int              numberOfRetries;
        private int              numberOfTriesLeft;
        private long             timeToWait;

        public CrunchifyRetryOnExceptionStrategy() {
            this(DEFAULT_RETRIES, DEFAULT_WAIT_TIME_IN_MILLI);
        }

        public CrunchifyRetryOnExceptionStrategy(int numberOfRetries, long timeToWait) {
            this.numberOfRetries = numberOfRetries;
            numberOfTriesLeft = numberOfRetries;
            this.timeToWait = timeToWait;
        }

        /**
         * @return true if there are tries left
         */
        public boolean shouldRetry() {
            return numberOfTriesLeft > 0;
        }

        public void errorOccured() throws Exception {
            numberOfTriesLeft--;
            if (!shouldRetry()) {
                throw new Exception("Retry Failed: Total " + numberOfRetries + " attempts made at interval "
                                    + getTimeToWait() + "ms");
            }
            waitUntilNextTry();
        }

        public long getTimeToWait() {
            return timeToWait;
        }

        private void waitUntilNextTry() {
            try {
                Thread.sleep(getTimeToWait());
            } catch (InterruptedException ignored) {
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值