数据库连接忘记关闭解决之道-模版,模版模式,还是架构

来源:互联网 发布:seo专员岗位职责 编辑:程序博客网 时间:2024/05/29 14:42
 写过JAVA代码的人一定知道,数据库连接忘记关闭会带给系统致命错误。
尤其访问量很大的时候,所有数据库对连接的支撑都是有限的,当打开的连接到了一定数目,
服务器就完蛋了。
 
   所以我们就要求程序员写代码的时候一定要关闭连接,使用
  Connection con = null;
  try{
    //创建连接,执行SQL
  }catch(SQLException ex){
    ....
  }finally{
    if ( con != null ){
      try{
        con.close();
      }catch(SQLException ex1){     
        .....
      }
    }
  }
  来保证每次都能把连接关闭,但是程序员每次输入这段代码,是很累人的事情。常在河边走,哪有不湿鞋的。
    还有一种好的办法,可以减少这种无聊的输入,就是使用JBULDER里面的模版,定义一个模版,起一个名字。两三下就可以把一段代码输入。但是代码看着很臃肿,而且万一这种逻辑变化了怎么办。于是有了一种更好的办法,使用模版模式。
   定义一个模版类
public class ConTemplate{
  //具体SQL逻辑
  protected abstract void doExcecute(Connection con) throws SQLException;
 
  public void excecute(){
    Connection con = null;
    try{
      //创建连接,执行SQL
      doExcecute(con);
    }catch(SQLException ex){
      ....
    }finally{
      if ( con != null ){
        try{
          con.close();
        }catch(SQLException ex1){     
          .....
        }
      }
    }
  }
}
有了这个模版,我们就没有必要在业务逻辑里面创建和关闭连接了。
例如一个方法add
 
 
public void add(Object obj){
    //内部匿名类
    ConTemplate temp = new ConTemplate(){
      protected abstract void doExcecute(Connection con) throws SQLException{
        //SQL逻辑
      }
    };
    temp.excecute();
}
 
代码是可以清晰了一些。但是代码里得写难以阅读的匿名类。
 
除了这个,有没有更好的办法呢?
 
这个答案是Spring的拦截器和过滤器。
过滤器和拦截器从根上避免了连接不关闭的问题。我们不用在提心吊胆地害怕连接没有关闭。
 
架构就有点类似一个桥梁定制的一个主梁,只要主梁质量没有问题上面附带的东西出点问题,不影响整个桥梁。
 
但是不使用架构,就好像每一段代码都是主梁的一部分,一节出问题,整个就完了。
 
原创粉丝点击