简单的参数热备份
简单的说,就是一个程序中的某个参数可以有多个取值,各个值之间有优先级。运行时,先使用优先级高的参数值;如果该参数值失效,再自动调用优先级低的参数值。
在我的项目里,有一个调用远程服务的方法,远程服务在多个服务器上都部署、运行起来了。因此,远程服务的地址有好几个。运行时,先使用服务器速度快 的那个地址;如果连接不上,再使用后备地址。
主要的代码如下:
/** 返回可用的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;
}
}
同样的逻辑可以用在其它参数上。对每个参数做一个简单的判断(本例中是判断能否打开远程服务的链接),判断通过,则使用该参数,否则的话,进入第二个参数的判断。