java连接池技术

连接池运作原理:

  在实际应用开发中,特别是在WEB应用系统中,如果JSP、Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic, WebSphere,JBoss)中,基本都提供了这项技术,无需自己编程,但是,深入了解这项技术是非常必要的。

如果有对Java感兴趣程序员,可来我们的Java交流扣qun哦:854818273里面免费送Java的系统教程噢! 小编也是一名从事了8年的高级架构师,花了近两个月整理了一份较适合当下学习的干货,以及我这8年的工作经验,分享给每一位想学Java的小伙伴,这里是Java学习者聚集地,欢迎进阶中的小伙伴。

数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。

  数据库连接池的主要操作如下:

  (1)建立数据库连接池对象(服务器启动)。

  (2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。

  (3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。

  (4)存取数据库。

  (5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。

  (6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。

1.先把连接oracle的驱动放到tomcat5.5/common/lib目录中,,这样他就可以自动找到驱动.
*****javaee里面的四个引用包都要拷到 webroot里面的web-inf里面的lib文件下

2.在tomcat5.5目录下找到conf目录下找到server.xml文件
在这个文件中 找到context标签,在标签context中加入以下标签
<!--未打包好的源代码路径docBase,打包好即:docBase="FileUpload.war"-->
****测试时不能用war,否则后果很严重
<Context path="/FileUpload" docBase="D:/workspace/FileUpload/WebRoot">
  <Resource
      name="jdbc/oracle"
      type="javax.sql.DataSource"
      driverClassName="oracle.jdbc.driver.OracleDriver"
      password="hpp"
      maxIdle="30"
      maxActive="100"
      maxWait="5000"
      username="hpp"
      url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
</Context>

3.参数说明
  Tomcat连接池中,部分参数说明如下:

    name:为这个连接池指定一个名字
    type:数据源类型, 一般不需要动
    driverClassName:驱动名字,一般也不需要动
    password 和username都不用说吧

  maxActive="100"  < !--最大活跃连接数,这里取值为100,表示同时最多有100个数据库连接。设为0表示无限制。-->
  maxIdle="30"       < !--最大的空闲连接数,这里取值为30,表示即使没有数据库连接时依然可以保持30个空闲的连接,而不被清除,随时处于待命状态。设为0表示无限制。-->
  maxWait="10000"    < !--最大建立连接等待时间。如果超过此时间将接到异常。这里设置为10000,表示10秒后超时。设为-1表示无限制,直到超时为止。-->

    PS:如果最大数据库活跃连接数过大,可想而知,内存占用量是非常惊人的!如果空闲连接数过大,则资源利用率低,连接池长期未释放,可导致连接池结点异常。所以选好maxActive和maxIdle是连接池性能的关键因素,当然这取决于服务器环境。

JDBC获取Connection的方法也要改变

 private final String driver="oracle.jdbc.driver.OracleDriver";
 private final String url="jdbc:oracle:thin:@localhost:1521:orcl";
 private final String user="hfq";
 private final String pwd="hfq";
 Connection conn=null;
// public TJDBC(){
//  try {
//   Class.forName(driver);
//   try {
//    conn=DriverManager.getConnection(url,user,pwd);
//    conn.setAutoCommit(false);//设置自动提交
//   } catch (SQLException e) {
//    // TODO Auto-generated catch block
//    e.printStackTrace();
//   }
//  } catch (ClassNotFoundException e) {
//   // TODO Auto-generated catch block
//   e.printStackTrace();
//  }
//  
// }
 
 public TJDBC(){
  try {
   Context context = new InitialContext();
   DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/oracle");// jdbc/oracl名称
   conn = ds.getConnection();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
 }

猜你喜欢

转载自my.oschina.net/u/3943295/blog/2413845