数据库连接池

一.什么是数据库连接池?

           数据库连接池(Connectionpooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

          数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来

避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。


二.数据库连接池原理:

         连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲

连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接

池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况

等。


结构图:



三.影响因素:

1. 最小连接数

是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。

2. 最大连接数

是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

3. 最小连接数与最大连接数差距

最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连

接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。


四.连接池的配置

配置信息可在Tomcat的文档中找到:

一、打开Tomcat主页

二、


三、


四、


五、


六、



《1》copy响应的jar到Tomcat/lib

《2》添加以下配置信息到conf/context.xml

Oracle:

            <Resourcename="jdbc/news" auth="Container"

                   type="javax.sql.DataSource"

 maxActive="100"

                   maxIdle="30"

maxWait="10000"

 username="scott"

 password="tiger"

                   driverClassName="oracle.jdbc.driver.OracleDriver"

                   url="jdbc:oracle:thin:@localhost:1521:orcl"

                   />

MySql:

     <Resourcename="jdbc/TestDB"

         auth="Container"

         type="javax.sql.DataSource"

         username="root"

        password="password"

        driverClassName="com.mysql.jdbc.Driver"

         url="jdbc:mysql://localhost:3306/test?autoReconnect=true"

         maxTotal="8"

         maxIdle="4"/>

参数说明:

①maxIdle连接池中最多可空闲maxIdle个连接

②minIdle连接池中最少空闲maxIdle个连接

③initialSize初始化连接数目

④maxWait连接池中连接用完时,新的请求等待时间,毫秒

⑤username数据库用户名

⑥password数据库密码


《3》配置conf/web.xml

<resource-ref>

           <!-- 描述-->

           <description>DBConnection</description>

           <!-- 参考数据源名字,Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 -->

           <res-ref-name>jdbc/TestDB</res-ref-name>

          <!-- 资源类型 -->

          <res-type>javax.sql.DataSource</res-type>

          <res-auth>Container</res-auth>

            </resource-ref>

《4》进行代码测试

JSP:
 <body>
   <%
   Context context=new InitialContext();
   Context javacontext=(Context)context.lookup("java:/comp/env");
   DataSource dataSource=(DataSource)javacontext.lookup("jdbc/TestDB");
   Connection conn=dataSource.getConnection();
   out.println(conn);
   %>
    <br>
  </body>

输出结果:连接成功!


JavaDBHelper:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBHelper {
	//数据库连接
	public static Connection getConn(){
		Context context;
		try {
                       //初始化查找命名空间(查询大池子)
			context = new InitialContext();
                       //参数java:/comp/env为固定路径(寻找java环境---大池子中的小池子)
			Context javacontext=(Context) context.lookup("java:/comp/env");
                       //寻找数据源(参数jdbc/TestDB为数据源和JNDI绑定的名字)
			DataSource dataSource=(DataSource) javacontext.lookup("jdbc/TestDB");
			return dataSource.getConnection();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	//数据库关闭
	public static void close(Connection conn,PreparedStatement ps,ResultSet rs){
		try {
			if(conn!=null&&!conn.isClosed()){
				conn.close();
			}
			if(ps!=null){
				ps.close();
			}
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值