简单的说,就是一个程序中的某个参数可以有多个取值,各个值之间有优先级。运行 时,先使用优先级高的参数值;如果该参数值失效,再自动调用优先级低的参数值。

在我的项目里,有一个调用远程服务的方法,远程服务在多个服务器上都部署、运行起来了。因此,远程服务的地址有好几个。运行时,先使用服务器速度快 的那个地址;如果连接不上,再使用后备地址。

主要的代码如下:

/** 返回可用的URL
* @return
*/
final private String findAvailableURL(){
   System.out.println("findAvailableURL===="+url1+url2+url3);
   if(isAvailable(url1)){
    return url1;
   }else if(isAvailable(url2)){
    return url2;
   }else if(isAvailable(url3)){
    return url3;
   }else{
    return null;
   }
}

/* 查找可用的地址

*/

private synchronized boolean isAvailable(String anUrl){
   if(Utils.nullOrBlank(anUrl)){
    return false;
   }else{
    int count = 0;
    while(count<5){
     try{
      this.url = new URL(anUrl);
      connection = (HttpURLConnection)url.openConnection();
      int state = connection.getResponseCode();
      if(state==200){
       return true;
      }
      System.out.println("isAvailable==state="+state);
     }catch(Exception ex){
      count ++;
      continue;
     }
    }
    return false;
   }
}

 

同样的逻辑可以用在其它参数上。对每个参数做一个简单的判断(本例中是判断能否打开远程服务的链接),判断通过,则使用该参数,否则的话,进入第二 个参数的判断。