注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

java解析配置文件文本实现某区间内与指定值比较  

2009-06-19 18:27:36|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

java解析配置文件文本实现某区间内与指定值比较

现在需求如下:要求可以配置的某时间段内,如果查询结果在大于某值时就返回false,否则为true

可以配置 如1点到5点 时间大于15分钟为异常则为 [1,5],15
  * 默认的时间大于n分钟的配置为 如为30分钟 ,30
  * 例子:[1,5],15||(5,10],10||,30

配置文件

#QueryIntervalContrllor
#(hour1 begin,hour2 end),To compare minute ||
#example (2,10),10||[10,13),15||,10            ###,20 is default value to campare   
query.interval.config=[2, 7] ,10 ||,20

java文件

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

 

public class QueryIntervalContrllor implements Controller {

 private ConfirmLogFacade ConfirmLogFacade;
 
 private Log log = LogFactory.getLog(getClass());

 public void setConfirmLogFacade(
   ConfirmLogFacade confirmLogFacade) {
  this.confirmLogFacade = confirmLogFacade;
 }


 public ModelAndView handleRequest(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  
  
  long t =confirmLogFacade.getIntervalLastInsert();
  Boolean isOk = true;
  Calendar c = Calendar.getInstance();
  int hour = c.get(Calendar.HOUR_OF_DAY);
  if(isCanUseConfigCompare()){
   isOk = isOkCompareWithConfig(hour,t);
  }else{
   log.warn("May be your 'query.cpseffectlog.interval.config' config is not right,please check it ,Now use default");
   if(hour >=2 && hour <= 7){
    if(t> 20){
     isOk = false;
    }
   }else {
    if(t>10){
     isOk = false;
    }
   }
  }
  
  
  
    //Content-Type:text/plain; charset="utf-8"--
      response.setContentType("text/plain;");
      PrintWriter out = response.getWriter();
      out.write(isOk.toString());
  return null;
 }
 /**
  * 可以配置 如1点到5点 时间大于15分钟为异常则为 [1,5],15
  * 默认的时间大于n分钟的配置为 如为30分钟 ,30
  * 例子:[1,5],15||(5,10],10||,30
  * */
 private boolean isCanUseConfigCompare(){
  String ttt=Config.getString("query.interval.config").trim();
  return ttt.matches("([\\[\\(][ ]*\\d{1,}[ ]*,[ ]*\\d{1,}[ ]*[\\]\\)])?[ ]*,[ ]*\\d{1,}[ ]*(\\|\\|[ ]*(([\\[\\(][ ]*\\d{1,}[ ]*,[ ]*\\d{1,}[ ]*[\\]\\)])?[ ]*,[ ]*\\d{1,}[ ]*))*");
 }
 private boolean isOkCompareWithConfig(int hour,long value){

  int time = hour;
  Map<String,Integer> map = new HashMap();
  String ttt=Config.getString("query.interval.config").trim();  
  String[] o= ttt.split("\\|\\|");
  if(o!=null && o.length>0){
   for(int i=0;i<o.length;i++){
    String text = o[i];
    if(text !=null){
     int pos = text.lastIndexOf(",");
     if( pos>=0 && text.length()>pos){
      String intervalStr = text.substring(pos+1);
      int interval = Function.parseInt(intervalStr.trim(), 0);
      text = text.substring(0,pos);
      //,
      pos = text.indexOf(",");
      if(pos<0){
       //默认值
       map.put("", interval);
      }else{
       map.put(text, interval);
      }
      
     }
    }
   }
   
  }
  
  //取默认值
  int defaultCondition = -1;
  if(map.containsKey("")){
   defaultCondition = map.get("");
   map.remove("");
  }
  
  
  
  
  boolean result = true;
  boolean useDefaultCondition = true;
  Set<String> keys =map.keySet();
  for(String key:keys){
   
   boolean b1 = false;
   boolean b2 = false;
   boolean greaterEqual =false; //false >  true >=
   boolean lessEqual = false;//false <   true <=
   if(key.indexOf("[") >=0 ){
    greaterEqual = true;
   }
   if(key.indexOf("]")>=0){
    lessEqual = true;
   }
   String text =key.replaceAll("[\\[\\] \\(\\)]", "");
   String[] ss = text.split(",");
   if(ss.length>1){
    int first = Function.parseInt(ss[0], 0);
             int second = Function.parseInt(ss[1],0);
             if(greaterEqual){
              b1 = time >= first;
             }else{
              b1 = time >= first;
             }
             if(lessEqual){
              b2 = time <=second;
             }else{
              b2 = time <second;
             }
             if(b1 && b2){
              int v =map.get(key);
              useDefaultCondition = false;
              if(value>v){
               result = false;
               break;
              }
             }
   }
           
   
  }
  //如果没有其它的条件匹配,并且有默认的条件执行默认的比较
  if(useDefaultCondition && defaultCondition !=-1){
   if(value> defaultCondition){
    result = false;
   }
  }
  return result;
 }

}

org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: - 和申 - 和申的个人主页

  评论这张
 
阅读(1071)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016