java web学习总结(十六) -------------------数据库连接池

时间:2022-01-08 01:59:09

一、应用程序直接获取数据库连接的缺点

  用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。如下图所示:

  aaarticlea/png;base64,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" alt="" />

二、使用数据库连接池优化程序性能

2.1、数据库连接池的基本概念

  数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正式针对这个问题提出来的.数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。如下图所示:

  aaarticlea/png;base64,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" alt="" />

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中, 这些数据库连接的数量是由最小数据库连接数来设定的.无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量.连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中.

数据库连接池的最小连接数和最大连接数的设置要考虑到以下几个因素:

  1. 最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.
  2. 最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作
  3. 如果最小连接数与最大连接数相差很大:那么最先连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接.不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,他将被放到连接池中等待重复使用或是空间超时后被释放.

2.2、编写数据库连接池

  编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:

  • Connection getConnection()
  • Connection getConnection(String username, String password)

  实现DataSource接口,并实现连接池功能的步骤:

  1. 在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。
  2. 实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。
  3. 当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。Collection保证将自己返回到LinkedList中是此处编程的难点

数据库连接池核心代码

  使用动态代理技术构建连接池中的connection

java web学习总结(十六) -------------------数据库连接池
 1 proxyConn = (Connection) Proxy.newProxyInstance(this.getClass()
2 .getClassLoader(), conn.getClass().getInterfaces(),
3 new InvocationHandler() {
4 //此处为内部类,当close方法被调用时将conn还回池中,其它方法直接执行
5 public Object invoke(Object proxy, Method method,
6 Object[] args) throws Throwable {
7 if (method.getName().equals("close")) {
8 pool.addLast(conn);
9 return null;
10 }
11 return method.invoke(conn, args);
12 }
13 });
java web学习总结(十六) -------------------数据库连接池

数据库连接池编写范例:

java web学习总结(十六) -------------------数据库连接池
  1 package me.gacl.demo;
2
3 import java.io.InputStream;
4 import java.io.PrintWriter;
5 import java.lang.reflect.InvocationHandler;
6 import java.lang.reflect.Method;
7 import java.lang.reflect.Proxy;
8 import java.sql.Connection;
9 import java.sql.DriverManager;
10 import java.sql.SQLException;
11 import java.util.LinkedList;
12 import java.util.Properties;
13 import javax.sql.DataSource;
14
15 /**
16 * @ClassName: JdbcPool
17 * @Description:编写数据库连接池
18 * @author: 孤傲苍狼
19 * @date: 2014-9-30 下午11:07:23
20 *
21 */
22 public class JdbcPool implements DataSource{
23
24 /**
25 * @Field: listConnections
26 * 使用LinkedList集合来存放数据库链接,
27 * 由于要频繁读写List集合,所以这里使用LinkedList存储数据库连接比较合适
28 */
29 private static LinkedList<Connection> listConnections = new LinkedList<Connection>();
30
31 static{
32 //在静态代码块中加载db.properties数据库配置文件
33 InputStream in = JdbcPool.class.getClassLoader().getResourceAsStream("db.properties");
34 Properties prop = new Properties();
35 try {
36 prop.load(in);
37 String driver = prop.getProperty("driver");
38 String url = prop.getProperty("url");
39 String username = prop.getProperty("username");
40 String password = prop.getProperty("password");
41 //数据库连接池的初始化连接数大小
42 int jdbcPoolInitSize =Integer.parseInt(prop.getProperty("jdbcPoolInitSize"));
43 //加载数据库驱动
44 Class.forName(driver);
45 for (int i = 0; i < jdbcPoolInitSize; i++) {
46 Connection conn = DriverManager.getConnection(url, username, password);
47 System.out.println("获取到了链接" + conn);
48 //将获取到的数据库连接加入到listConnections集合中,listConnections集合此时就是一个存放了数据库连接的连接池
49 listConnections.add(conn);
50 }
51
52 } catch (Exception e) {
53 throw new ExceptionInInitializerError(e);
54 }
55 }
56
57 @Override
58 public PrintWriter getLogWriter() throws SQLException {
59 // TODO Auto-generated method stub
60 return null;
61 }
62
63 @Override
64 public void setLogWriter(PrintWriter out) throws SQLException {
65 // TODO Auto-generated method stub
66
67 }
68
69 @Override
70 public void setLoginTimeout(int seconds) throws SQLException {
71 // TODO Auto-generated method stub
72
73 }
74
75 @Override
76 public int getLoginTimeout() throws SQLException {
77 // TODO Auto-generated method stub
78 return 0;
79 }
80
81 @Override
82 public <T> T unwrap(Class<T> iface) throws SQLException {
83 // TODO Auto-generated method stub
84 return null;
85 }
86
87 @Override
88 public boolean isWrapperFor(Class<?> iface) throws SQLException {
89 // TODO Auto-generated method stub
90 return false;
91 }
92
93 /* 获取数据库连接
94 * @see javax.sql.DataSource#getConnection()
95 */
96 @Override
97 public Connection getConnection() throws SQLException {
98 //如果数据库连接池中的连接对象的个数大于0
99 if (listConnections.size()>0) {
100 //从listConnections集合中获取一个数据库连接
101 final Connection conn = listConnections.removeFirst();
102 System.out.println("listConnections数据库连接池大小是" + listConnections.size());
103 //返回Connection对象的代理对象
104 return (Connection) Proxy.newProxyInstance(JdbcPool.class.getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler(){
105 @Override
106 public Object invoke(Object proxy, Method method, Object[] args)
107 throws Throwable {
108 if(!method.getName().equals("close")){
109 return method.invoke(conn, args);
110 }else{
111 //如果调用的是Connection对象的close方法,就把conn还给数据库连接池
112 listConnections.add(conn);
113 System.out.println(conn + "被还给listConnections数据库连接池了!!");
114 System.out.println("listConnections数据库连接池大小为" + listConnections.size());
115 return null;
116 }
117 }
118 });
119 }else {
120 throw new RuntimeException("对不起,数据库忙");
121 }
122 }
123
124 @Override
125 public Connection getConnection(String username, String password)
126 throws SQLException {
127 return null;
128 }
129 }
java web学习总结(十六) -------------------数据库连接池

db.properties配置文件如下:

java web学习总结(十六) -------------------数据库连接池
1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/jdbcStudy
3 username=root
4 password=XDP
5
6 jdbcPoolInitSize=10
java web学习总结(十六) -------------------数据库连接池

写一个JdbcUtil测试数据库连接池

java web学习总结(十六) -------------------数据库连接池
 1 package me.gacl.utils;
2
3 import java.sql.Connection;
4 import java.sql.ResultSet;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7 import me.gacl.demo.JdbcPool;
8
9 public class JdbcUtil {
10
11 /**
12 * @Field: pool
13 * 数据库连接池
14 */
15 private static JdbcPool pool = new JdbcPool();
16
17 /**
18 * @Method: getConnection
19 * @Description: 从数据库连接池中获取数据库连接对象
20 * @Anthor:孤傲苍狼
21 * @return Connection数据库连接对象
22 * @throws SQLException
23 */
24 public static Connection getConnection() throws SQLException{
25 return pool.getConnection();
26 }
27
28 /**
29 * @Method: release
30 * @Description: 释放资源,
31 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
32 * @Anthor:孤傲苍狼
33 *
34 * @param conn
35 * @param st
36 * @param rs
37 */
38 public static void release(Connection conn,Statement st,ResultSet rs){
39 if(rs!=null){
40 try{
41 //关闭存储查询结果的ResultSet对象
42 rs.close();
43 }catch (Exception e) {
44 e.printStackTrace();
45 }
46 rs = null;
47 }
48 if(st!=null){
49 try{
50 //关闭负责执行SQL命令的Statement对象
51 st.close();
52 }catch (Exception e) {
53 e.printStackTrace();
54 }
55 }
56
57 if(conn!=null){
58 try{
59 //关闭Connection数据库连接对象
60 conn.close();
61 }catch (Exception e) {
62 e.printStackTrace();
63 }
64 }
65 }
66 }
java web学习总结(十六) -------------------数据库连接池

三、开源数据库连接池

  现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
  也有一些开源组织提供了数据源的独立实现:

  • DBCP 数据库连接池
  • C3P0 数据库连接池

  在使用了数据库连接池之后,在项目的实际开发中就不需要编写连接数据库的代码了,直接从数据源获得数据库的连接。

3.1、DBCP数据源

  DBCP 是 Apache 软件基金组织下的开源连接池实现,要使用DBCP数据源,需要应用程序应在系统中增加如下两个 jar 文件:

  • Commons-dbcp.jar:连接池的实现
  • Commons-pool.jar:连接池实现的依赖库

  Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

3.2、在应用程序中加入dbcp连接池

  1.导入相关jar包
        commons-dbcp-1.2.2.jar、commons-pool.jar
  2、在类目录下加入dbcp的配置文件:dbcpconfig.properties

    dbcpconfig.properties的配置信息如下:

java web学习总结(十六) -------------------数据库连接池
 1 #连接设置
2 driverClassName=com.mysql.jdbc.Driver
3 url=jdbc:mysql://localhost:3306/jdbcstudy
4 username=root
5 password=XDP
6
7 #<!-- 初始化连接 -->
8 initialSize=10
9
10 #最大连接数量
11 maxActive=50
12
13 #<!-- 最大空闲连接 -->
14 maxIdle=20
15
16 #<!-- 最小空闲连接 -->
17 minIdle=5
18
19 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
20 maxWait=60000
21
22
23 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
24 #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
25 connectionProperties=useUnicode=true;characterEncoding=UTF8
26
27 #指定由连接池所创建的连接的自动提交(auto-commit)状态。
28 defaultAutoCommit=true
29
30 #driver default 指定由连接池所创建的连接的只读(read-only)状态。
31 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
32 defaultReadOnly=
33
34 #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
35 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
36 defaultTransactionIsolation=READ_UNCOMMITTED
java web学习总结(十六) -------------------数据库连接池

  如下图所示:

  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARUAAAE9CAIAAACqc2HuAAAgAElEQVR4nO2db3QUVZ73641nXz554Tkzvtgzrn9YznCeQWJgH3tdmDc74Mw56z5zxhEYmeAzWqu7s6vwPLOCwiSByMTojDVIDI6SxBnFgIkbQdpEZZqgYBTEgBKz9AkJBsmf7g4hgaRCYO7zoqqr7v+qrv5TVZ3f59wD3bfuv+rcb99b1XW/V0EAAGSOruuDg4NKbgvt749VNDYua4xVNDb298dyWzgABIfc66e/P7YsFiuPxQ4dOtTU9NqyxhhICChWcqCfk60brYAQqojFyhtjjbHGWH9FLNZYXhErr2jMTWOLlaiqRLS4360APJCtfrpbNpJvNyxrjB06dCgWK69oXFbRuGxZxbJl5Y1MvrgWUTDUqOcW2ETVnBZXuHoz0g/2yWHVWW0gC4qq/FbFtQiVlJOSW6agIm6ZcwCP+qmreqau6pm6qpqrIw1XRxqm+l9Mnnx2sHPzf+9bV9HYWNEYq2isqChfVl5Rvqy8oqKigikgrkWwv5bozyxKzyGq2iXEtUjBFMSt17G1TBlu+11UtVLalcS1SLoAuzlGd1ZVTkviWiQSsbLwUwrLZCK5Zc4VZPqJxWI1NTXcQ8889dunf9+FLh1mQ39/bFljbFljzBh5lpVzbyEwPcyhyzn1yLgW8eVPx683f/rh1U3URlXNaYmRjamTTMktU1yRoMziR6ifgwcPLliwYN68eaKc69e9gBL7uaG/P1ZR0bisPFZZWSm4ecD+XbEYeopiT5DMvw9nDkN/H6bB8uLjBOe18Sqq2nMTO2+6W/BjBNMeRYlocX5dVMOM4rBvd+RGVFHV+njImRyWj/c9FdHinOKZGQFbpqgiYZnFD18/hnhWrlwp0c8v/uUl9M1r8vCLf3lJkFuin7impv8I5MzB7oacBFaHxEuNqgrZI9M1iPSjkP2buZjgTJ549VLfBWxdhOrsmrAayL7KwUpLfZRS/RAtkOiHW6agIkmZxQ9HP5Z4Vq1aJdHPT8sbUP+LqP/F8od3rX1o19qHGtY+ZLzYVf7QrrUP7yo3Xj+8a+1Du5jcXP3YHz4zwNDp+VfRVjz/78mbh9DjTzot2xfIAYO6gibqddQPVbj91nrlIB9af+70g7/J1fgjLbP4ofWDi0eunx+ufh2decYIP17zx7fPXReF//3An5jcjH6Ir1NsYsB2bn4CRJalqFGufpgLhoz04zyhYga4zPRjNlF+/URPGYnSJNc/1D1P6stHcvrpQ5xIeZnFD62fmpqaeRjbtm0T5Vz2k73o9GZ0evM//rR5T4++57S+p2dmT4/xrxX0f7yvmZebvf+GTVyIG0NM5+YmIG654d/ivCsK7EKDX0W6TdYXq2ZO7/EvfUm9lH7Yuqi7dlgr41okoqrCmyHkNRL7YYqGXAaH8YdfpqQiUVyR4/33n8X/1IpO/uque1sbjkw0HJnYdXSi4ehEw5GJhqMTu45MNBydaDg6cdc/twhyk99bzJ/cjMbuqZqx6etsYQL6G5B3/wBLjJXAvSVIZuTNGrn1Yq3l1kXeidCIfsdeeNnQc0jii0TcLs6oQH8LsSk5ZQoiOWXOFbzr53v3tC384dvbDyS3H0hujya2H0hsjya3H0hsjyaMmIU/bMt5c+cCc7AXhpesnj+Y/4P9kpDbhs4VJPe459aVRTjIy/PXgDcMuYBIQgToBwC8A/oBAO+AfgDAO6AfAPAO6AcAvAP6AQDvgH4AwDuB04+6tNTvJgCAW3zTz4fPLrECQmjL8pvYUPhWAUBG+KOf1l/ehr8d/Lxjy/Kbrk69N3x0x3NrfmC8AP0AwScv+pEYJyCEPnx6iT68Ux/eOd6rDXfXDBzacLH/6JblNw0f3XHqzUp1aanxAvQDBJ/c68fROOGDp0v18S48bLz3+1uW3/Tcmh+oS0uN8NyaH2xZfhP3WkiwNFXuWwAAeSHH+nFjnPBBRak+3IaHa1P91vxNXVoqm7/x/WQUrpsAAOSbXOrHpXHCOxWl+kCTFVrXL5QEJrcxttDWA7J11wCQN3KmH/fGCa3rF+i9mhFa1y/UB3Zyw3B3DU8/BsaYw/OfAf0ABSRn+nFvnPD6L2/Te2v03prW9QuNF2wQiieuabQZh6NvAQDkCx/uXzeU/7XevaF1/UK9u5IbpCMP6zbtwrcAAPKDD/p5/sc3ta5fqHdv4Aa5eAAgUPjz+2mD+reSUODGAIBnAvf8GwCECNAPAHgH9AMA3gH9AIB3QD8A4B3QDwB4B/QDAN4B/QCAd0Kvn3V3f8vvJrjBcTtGIJSETz+xLYs6n/yfVnjhvu/gb2NbFvndQC6gn+IkEPo5cuTI5cuXXSbufGJBPNbwzSevfvPJqyfefLbh8ZX4284nFuS1qV5h9SPfo5GLhyxAfgmEfnbv3t3c3JxMJt0kjv3qu9988urMpfdTJ3d/1V7f8PhK/G3sV9/Nd2s9AfopToKin9HR0Zdffvn8+fOOid9f991vPnk1dXJ36uTurzp2Gvqx3r6/TqSfqKpEtKi5tMHcDZf2SJAbJ1hHyR0X+VuBU0VR+sE2xhJ7NpAFs1kA/wmKfhBCyWRS07QzZ87IE7/77/NPvPnsV+31X3Xs/Lhpy8Z7v4+/ffff5wvyYQYj+D5V9nd6lNIE+U0v2vE3rqnpTHYS1oNBPv7wqhY4PcD4EygCpB+E0NDQUFVV1djYmCjluru/9cJ932l4fKURNt77fSNYMS/c9x3BHTm8j/Je03slkgIQ7ziP2BGIs4Zcqh9+1U5OD0AACJB+UqmUm/HnrV/cjt8w2Hjv9/G3b/3idkE+F/qRzItE+iGHoohn/QirFjs9AAEgKPpJJBIur3/2rL1Vcv9gz9pbBfmc9EPM0FBUtbwV2KOYaOht4O35G+nBkNaPXSA1f+NU7eT0APhPUPTj/v7b6w/cIrl/8PoDtwjyOeqHdyfA7u74Ufz+ARarqhFSYlhJrH7SSbBxjLoJwTg9kFmAABAI/WT0+88fV92C3zBoeHwl/vaPq0T6ySngkgUghAKin4w4srW0adXfWOGF+76Dvz2yNU/bn8S1CFicAjTh0w9F4Z5/w6ZYIB7AIPT6AQAfAf0AgHdAPwDgHdAPAHgH9AMA3gH9AIB3QD8A4J3Q66do/Q+IR+/gqbeAEj79zBX/A9BPGAifforF/4AL9wlr0E9wCZZ+YrFYTU2NQ5oi8T/gAvoJGQHSj7EDsWTjYYOi8D8glWK+Jh0OiIXloJ+AEhT9WNt3O+qnSPwPOPohY0E/YSAQ+rHEI9/4HhWT/wHopyjwXz+4eBz1g4rG/wD0UxT4r5+ampp5GNu2bZOnLxL/A3ohN+gnlPivn0wpNv8DMqPtcAD6CQPh0w/4HwDBIXz6Af8DIDiETz8U4H8A+Ejo9QMAPgL6AQDvgH4AwDvFrJ9r1/9y8FRqx7vnqlv6IAQq7Hj33MFTqWvX/+J3H8mWYtbPO8dHD5xInh+bndARhECF82OzB04k3zk+6ncfyZZi1k9t29nUleupKZS8AiFYITWFUleu17ad9buPZEsx66e6pe+SjhKXzbCv9g5usBJAKGS4pKPqlj6/+0i2FLl+xqfRyKQZ/qtm0czVa1T4ct+j+2rvsNJkHN5SlSVa1yQamYxvXaKsectrOWw4qZUpka0n0chkdI2ivpGrYnPcNu9hfBr0E2yqW/ouTqPhCTO0/KaU1c+Zg5tO73t0X+0dVjJ+aFGVJVqXLD6+ZYmypkVaiBmia5TIls+xmM+1Mrbwz7UyM1l0jaLudi7WbAMGkWv3g9gRurroGuvQg1G2KPq87LZ5DxdBP74j3ziouqVvbApdmDBD87Y7p2euGeHjc6n5/+fFf9M+GOh6/szBTV/ue2TP03daKTmhRVWWaEdk8fGqJcoDLeIS7BB9QIlUfY7FfK6VyQqJPqCorzkXy2RvURXFfvvag0pZTdx6rTwY5Sa70KKW1cQvTMSrlqQb+blWRjU4F2FsCvTjN/KN66pb+lJX0PlxM7y2tezK9OyV6dkpfdbSzxV9dkqfvaLPvl5dZqXkhDdVZYn2kSw+XrlE+dmb4hLsEP2ZEqk8gcWc0O6UFRL9maL+yblYXvYT2p3pvH9aq9z5m7gR/9FvIsraaLpwbrPjlUvsRuJ5cxVSV0A/frN79+7R0VHRxqnVLX2Jy+jcRTM0blk8OTU7OTU7MWXrZ/LK7OSV2cmp2aYti62UnLBXVRZrnebb6Gp8lmTGxysWK6v32odW77Wy25F3boufuxhdrUQqTmCFn9DuXKx14sUu1jpPaHcqapOZ3XiBOrfZCyyaOO002sCPaVpr1E4mI86Lymg3EsubbrDVgBPancQpxysW24k7t0XM8ulkKHEZ9OM3xsbdyWSSu3F3dUvfyCTqHzPDKxWLxydnxyevjl+29TN++er45OzFy7OvVCyxUnLCXlVZrB0aQ/1j0VWKsmqvGd9YrqTj479erCiK2milN19HVylK6bY4Vlp0lRL59WdY4Z9ppVghZuGfaaV2CWojESMKWHYmprGc0Pwh+rzYotKN/EwrZRtstiT+63KsKCPSLtOqnZNsZBL04zeGfhBCQ0NDVVVVY2Nj+NHqlr7hSdSXNEP95r9LTlxNXbqanJix9JO8dDU1MZOauPripr+zUnJCs6os1v6Mv6Dik/HNi5VVzVaW9FsqfRL1JaOrlMjmT7GYT7VStpBPtVJF3WWmt14oCpWXCFQbjBgz/a6fK6XVcbvZRpmc5tlFWY+b0zXabUN9SfTnantUTLczsvlTh2TDoB/fMfSTSqVE48+FS+hMwgzbn/pfIxdnRi7OjIzb+hkZnxkdnxkZn3nhqbuslGx4vzqi/Dx6JoHONKvKYu1965D9Nv7UYuX+ZitL+i2VnpNSUMgn2iJFfSWBziSi95sv7OyKEnnqE7adkpLRKz9XFlXH04ei95slWC/YorjxZNs+0RYp6WLtBpt1vV8dwQ7RyS5cAv34ze7duxOJhOT65/w46h0xw++euOvCmP7xudS/Nh3516Yjhn4upGYujOlDKf23T9xlpWRC/MkyZdHWeO8I6h2J3q8o979hxytlWof1ek3UyNKxNaIo6h/o9NEnt8bJo2aCdOHxJ8vSibu0RXYJ6h9GUG+X9iRWb7pMup12/BuqokSe7DLf/mGNVYtxyGxAx9YInqz3DXXR1njvSPzJMixyxGpS5MkurG1vqOnTJ0+qS1tUpt5vlcBLdn4c9OM3jvffBsdRz4gZav7z7wcT+sfnUkvXv2GI53xCH0zog0l9MDHzzH/+vZUSDy8Zv4ysidqRb9jWiBu3qkqZ1j6CekbiG8uUn66xDqkvWem7tEVM5Ev2Dy7Koq1xq/D2rRFFUZQyrb1LW2Smj/40ndHOhbfHDvGNZdhFjtkwTo1E84gzskqObyyLbOwiy+/SFimRjV3GC6MEu8ZFa9RFdrHxjWV4IznJBkE/vuP4+8/XY+jLITM8/X/vPjeinxvV3z11/t1T58+N6udG9YFR/dyIfm50uvr/3W2lhOAQjmp3KGp9doV8PQb6CTbVLX0DY+jUBTNUrbu7f3j67LDePzzdb/473T88fXZ4+uzw9JZ1d1spQxKiP1EIfvJagap+pyqilGnvZFfIAOgn4FS39PWPoZMXzFDx+D889djSTY8v3fT40qewfzc9tnTTY0srHv8HKyUEYXjNmOmpdVkX1Q/6CTi/2z/QO3ztiwuo+xsIwQpfXEC9w9d+t3/A7z6SLcWsn3dPJNqOpeKj12U/jELwI8RHr7cdSx34DNbPBZiZ2ev7j43Wtp31fbkyBCrUtp3df2x0Zva6330kW4pZPwCQbwKpH0WBUMyhiAiqfoBipbj+uKAfoLAU1x83ZPpRFOWGv/oreVDc/IWiKrPrlY+Y1tqqhm2XEgrimTcY9JN3pPr5H482y0Po9ENuPwf6CROgH//1E7bNhLL7xEA/eUeqHzc4VwH68Q7oxyZ8+nGRW5SG3GKb0I99COsZdqS1Zam7lFRd+MZbEU1T8ZRYOjVK9EzrCL5dpIWoMVi8mYXbkozOBS8zYi0iJTeZ5Gbk7IgJ+sk/TvqxBhnuyCPQD7U9sEJuQ2rt9qtiO5ZSndZ9SjKGTMle6vDGQsF2xc6NIeOFLZGcC9H5rU1bGe1RL3kZuQMV6Cfv5GP8EW1AT/+R0285kyrXKekY7sb2cS0i1o+wtU6NoeKFLRGfCwk28PKqxhvMyWjEkk0H/eSdfIw/PuuH2e3eN/0Y792ftaQucYOZ7LaKQD95Jy/XP6IZUVyLUAfYGVRUS38Nu0vJzJoYpTjoR9Rae9YnagzV10UtcXMuKKpyyxTN35iMcU2LMllAP3knL9c/5PWtRvZZlXchbV/8Yt3IVUpETmjI+weu9IOXibWW1A+vMew1h/j+gcO5UPckEJ2Eun/AyYjVbUWBfvJOvu6/ZYl/d7qd52+Z4t+5gH7yjuvnd9jxxxqF8kAh+1xciwjuoeWmMaCf3BAy/fhKYfscNh3iXZmDfgIB6AcoLMX1xwX9AIWluP64uq4fO3YsYKfk+wJJCHkNRYSu6y0tLUV1SgBQMHRdr6+vB/0AgBdAPwDgHdAPAHgnWPoZ720faCoZ7233uyH+QT2h47MxA+BAsPQz0FQy3jV/oKnEIR31HKTC/tBIxvP7IXf1WIFhROKHfvr2Lq/bvLxu71GEEEJHOzYvr9u8vG7z8o7TWRd9urZuR/MYQggNHt9hFlu3eXnd5lrcOr5vL1bXaHOz3RimNEmrTtdyC0cIYSf16HGJZzCnfCujWab5WZknlVP9yHfjcUN3ZclAU4nzECRYfYA9A+zY+agHnN131Nx2a0lpBdVPutMc7bA70ODxHWxHzBBSP3bXJHuqoAE4g8d3LK/bUduxQ6AfuyJ+3ubOwXS93JPilm9/An17MUljdeVSP/Ld4CyUh9uXbHprYeX++Vs7vv3skZLnP72h7gvl4XZkzd8OzR/YKR2CRKt3oqpb/dhPP2dKUetntLlZ2As9IdKPURf2pd5xGhniMTs6H6YQO148sGAViUtwOorrM3/6GR0dFe1GavGt5Zu4wTjaXVkyfujmXs2DfnAzpYzGHza7XQX5VD62FoBxF8CcDyJa1MyGL+p09RibHeHa4UC44sBIo6q888Jx+PrH+5/9+mjH5kePd5pTJmGnl+gHi+nbu7zjNDZKCBH079Hm5h3Nx/cu5zfmdC0+G+zbK6lFqB8iV/70gxBKJpPc3bBxvle3VhSMKVyvJp3C8a9/8H5BXv/ILn/IxWaYCAQr+PEorlsA1rONKriL0DilUREuHQ7imppugsTegDovEuLyw7yKwCY5Qv2kpzSjzc2i6wrX+sEvKsQI+jc+G2QaM9b5qHf9GBdj1HdKXvWDEBoaGqqqqhobE34aN1Su2NC+iQ03VK4Y723vrikZbr+5t0Y8BDmt2HQ/+TF1Zia1yrW6GbuCHytZuOg/gvVo7mteaXSEuxXa+FkIxcqeFwGhH4SQ0ecIeQjGH7ObiqdPDvoxcxkN6NvrKCGxfrCMtEJyNP4UYv6GEEqlUo7jzw2VK0QBIdRdWTLcfnN3pVA/3AXE7Jpn1xcPxPc27cqULk1hb4vxF/0XVj/0UnT+YCc4LxNWPwghey6XhX6w736ma2K9MN2AweM7BHfekFWRcP4m04991Ov1D36++dNPIpFwvP7pXL9MHowpXPcG0RROeJ2DHXBx/4DrshHXIhFVjdhvmRX8IsVabgG51I+zwwHZduFkkTovEuL+gd190z0GmxGNdT5al4F+8Esa9v6bnYW6ABNLiCzEbhhWkRVJHjVzyW7T8cpPt2Ss89FCjD9u7r8dfKTszKvrROHgI2Xjve1dG0qG277dtYEegphrFs6XtHXhwv1hiEzKuT6iVnvyr99l1+4Z64doJjWGODscYD4Jqioaf9jzwsHHH3PmRk76rcjmvbUuxx/yNyVE//5DdmJyADzawbkWon4+sgZGq17mZyv8aPoyRnDzWlA+8WlgGfOkH5e//0RX3vZl7Y+M8AX54ovaH0VX3oYQEumnAMicmMKM5LwE8zdAQJ7045K2e240wtv33Ni2Ih3uubFthRmDEOraUGKEQjYMoeJ9aEZ6XsxYUfTYg1WmT1rk8fmDsIPfbS4mivW8ggDoBwC8A/oBAO+AfgDAO6AfAPAO6AcAvAP6AQDvgH4AwDvB0k/x+x/kY3k2uXAJKCTB0k/m/ge5guuX4MZEQW6jUBB7A9CPf4Td/yBXcHuziy7u0JJALM8G8kfY/Q9yhTf9OLoogH6KnLD7H7ArCIjZDDldkszDPOknrkUimpaevvlkb0Ati2P9GJxOHciC8PsfsKv/Oau7uSYBOFy/BCcThahKps18eVxO7A2INeyMHwOMc/kk7P4HCHG+X3HvHGqls+sLfWGksBm8SWVB7A1I5xKctB+DYHQEsibk/gf81f9mV7avTgTJuEU6RZLH860fN/YGuH6EMsEtHICcEXL/A/7qf2a5vygZWaan+wd45/bJ3oCYvzF+DBwLByBnFIP/gTlXsVf/I0YmomSITYBdezubKDiZaBfE3gB/x5ukBsHnu1gB/wMA8A74HwCAd4L1/A4AhAvQDwB4B/QDAN4B/QCAd0A/AOAd0A8AeAf0AwDeAf0AgHeCpZ98+h8E5ukvWMJdRARLP47+B9TiHarbSHuR+84qeMTUI2CBUMwESz/O/gfEI/r0M/nSZd2uO2tci0QiuRurYAl3MZMX/cRisZqaGtHRrPwPiC/aqKqoqoo/eyz5DnbbWY1S+BvtegH0U8zkXj8HDx5csGDBvHnzRAmy8z8gV8mpUcGiMtYGQOQ3wJbP7KLtxqtAuoQBLBCKlRzrxxDPypUrJfpB2fkf4KstzfX99N7sPBsAod8AiZ2V9Shx8ioQOyuABUKxkkv9WOJZtWqVXD9Z+R+YgrF0Y74gej4JxwxB0KcE+/269Cpwt4gVLBCKiJzpBxePG/1k4X+Qnrdhq7Pp94L9tp36OtP7Muvo+dEPWCAEmJzpp6amZh7Gtm3bRCmz9j8w7xsQ993o94wNgNBvgCyXiLTey7wKHMoEC4Sixof719n4H5jgxmu898ILbo7fAFkqGZ2OkXoVSMsEC4Tixgf9hND/QPS1DV/ncx3wP3AD6AfgE6znD4IK6AfgA/oBAO+AfgDAO6AfAPAO6AcAvFNA/SgKBAjFFwqon1xwov2x9+rndbx4e3vd7e9uv/3A72/d//yt+357y9vP3XKi/bGcVAEAbgmdft6rn/eX6xf/cvXC9en/vj7x6bVUx/XhPdfOvzQ78Nx79bKH7gAg94ROP8T488JtB35/6zvP37Lvt7e8/dzfzInxh7M7ZeAp4uXlodPP2fOpjXXtZ4cmL12ZuXRl5urVq5eu6GeHJjfWtZ89n8pJFYEm3/phniW0ka/CkxzNi34Sh+srMVp76AQ9rZX1hxNMPkF0JmBFBEE/LjcOQgh91N3/3OsffZ2YSl6anpzSJ6f06ZmZyamZxKXprxNTz73+0Ufd/TlrcDDJo36MlRL8DcYQiqrsokS3R/NB4nA9JpqeVlZDicP1HKXkQD9YyUHQj8uN6xBCr+4/1vxBz2ByamxSn9ZnpvWZ69euTuszYxP6+eRU8wc9r+4/ltNGB4+8z9/cFOtoNVGA2RqpH14EX0C50I9dckD0Mzo66rhxKkKo+pX3/3xi8OvEVOKSfnlKv2yPP/q5xNQ3icvVr7wvzs0aA+AL5vCH/SNa1JyNqFE7FbFAT5ZAWrJGJ3ZhTkAu7CP0w12aQJ2pS+8HuzlO+pHbqzBHHZZXMH4PruDKpbK1x/jf6N1sGlI/2BywtQfhORFdDDVNTJccEP0ghJLJpOPG3f9R25a4pB9470TJHat3NBwYuzhZcsfq6ZlrVswR4fwtqtJ/HTLGXv2D/SGNLkevuHGVQFiynZi3rlzQcmIlD76rOMc+gT1Td94PWGLHBkn6OecovuTJ0cvBLW70g1BPKy0gWz+Jw61prfS0mtLAj9anRcUms0oOjn4QQkNDQ1VVVWNjY6KUD1buSU3OlNyx+mLiYskdqyenr1n/GjGHjvfxc7J/VTqGuwaa+9opgauScd8T6ovXGih4pQnnb+m30v7LtIcZOJ30I1efGw8VBy8Hgp5W83ufnXK5n66Rqcj5GzO0pA+TxXNGINTTWtmKFKW5uTkQ+kmlUo7jT571404eXvTDZqQuEsTmBHnUDxfZUS/iwYt04+XgFkY/7u632dkSh+srmcEmnd7WoiCZkRIpyscff+y/fhKJhJvrn/+obRu+OLWj4YAxW7t4ZbbkjtXjV2atGPn8zZrBaGlXGp55adb6cVVyWj/O5gR4y+kOyLNPYM/UjU+DBTtY2CZ0PGG6OMobgIVeDm5h77+lZUJcxVDDEnYME1bicD1xaVPf2lqPzQC5yRBCicNIUQYHB/3Xj8v7b9WvvH/weG9yYiY1OZOavJoOM6nJmeTEzDeJi7L7B/a8geMLQF/lZ6UfNyXb44/zdT1+O0Ajxx+u+wJ9pm58GohsdjpLA7Q3kSUMF0cpyxQjhcjLwS3k7z/0EEO9rz+cSM8FeZOy+tZWTIyUTETJEEKJQOjH/e8/r+4/1t7Z+fXQ2a/ODZ0aSJ4aSJ7sHzvZn+w5NzQ41N/e2Vn896+94PeTCn7Xz7sNlyOCoB/3fNTdv3NPx7WJz6cunhpP9owne8YSveOpnqnxU9cmPt+5p6P4fz/1gs/9NwCP77C34XJEuPSDEPqou/+J7fsq6/dX7dxXtXNf1c63q3buq6zf/8T2fSAeAf7px5zXheMxPS+ETj8AECBAPwDgHdAPAHgH9AMA3gH9AIB3Qqcf8D8AAkTo9AP+B0CACJ1+5rr/gXe4y3KK1JagEJjPX4dMP3Pd/8A7hdFPMGwJiMZwFzXwoolcklOwCgmGfsD/oCDIF43mimDYEmCNqa+nqzP1IdWPi6d9AqMf8M/aGoIAAAq5SURBVD8oCH7ohxdRCFsCvO7DVAMSh+vrDx+WVBdC/YD/gfg5MVc+B+zOrbza54wtAVk1oU3jjRlFLnXAInn6sRbDGlmCpB8E/gdC3PkcuIoX6afobAmoqu0EWIxRIKatdFby+sdelkqNWAHTDwL/A7tl+BDlcp22U7x8/CkuWwJ8JRwxgnFkg0eRGhM3z6ooQPoB/wPBPMm9fhxrF+in6GwJ8AXXeP7DrGrS+saShlA/4H8g7q8ynwNBLaJ4Sy1FbktQzxGWMWZi7/ArKrxk/vUPMUc8HLTrH/A/EC8zk7gXeLp/MAdsCdICIpRAvCHHE/Lihvr9h5ApOaUMhn7A/0BK3laPFq8tQaYle795HgT9uGdO+h/kq5sH4PGdvNkSZFRyNjoOl37QXPQ/yIN+it6WwDXkVVHmhE4/ABAgQD8A4B3QDwB4B/QDAN4pqH4gQCi6UCj95AjwPwCCg67rIdMP+B8AwSF8+gmk/0FhlqYVlgD8vJo5gt/KXJ5L5qccPv0E0v8A9OMWYqMgTvHU2g22SdJHBeemfsLvfxBA/fj9cJsAdh0JBtZ/8cfl7azpKGFHL/RZB0I/4fc/AP24RaYfosls+0WPuguLKABB0U/+/Q/kpgXkF1r6r8ObL5A7FVJLa/j1UjMS99YIfL8EXplUpGZXwSySUOg+KnA4kLkjEB8XuQmqfH6Ft4NJQn6KrETSFUmmWQKvCGJpPfcjdTxl/scVFP2ggvgfyEwLsD+X+XfkfJcRswpsnZpIPxmaLlDWCMJIouumW09VhLdeVKnU4UDujmC3AlvFyjFREMKKgPq8eUOM1anlW7gyXhGUdwX9kbo7Zd7HFSD9oLz6H2SwKs4SA+NMQP1J2aWd1OWvR9MF6Xpvcvwza+L0Naw3CitleyzWeAd3BHyMlifjf9dzPh2H8YdaJYt/FyoOXhHU+MNfQu/FECJA+smv/4GLRaPGx8l8SJgzgbN+xHXyY+TWCAL9uOiKTvrh9jYSB3cEs1S7DwqSiZEJhFMEmVxwAZQj/bg2hAiKfgrif+C06DquRSKqGrHfMs4E+LwE/4xl87fMTRccRYXPIe2vebIi6fzNTTd3cEdgPi5RMuoDYdtEXj/RmidWmxPL4zPwipDrJwtDiKDoJ//+By70w1xGMNehzFW64/0DL6YLcv0ILtOZiswI5/sHgg+M/N41z9l2R0CMTETJSNgJHS4M9uPCjmLnLb1oY70iMtUP/1yCqp/g+B9If53IMnXYCOgN8HyS+SkHQj/uya//QaYfX1HrR3KTuFjxcMoh0w/Km/8Bfk87gzxF2cOic88dwesph08/ABAcQD8A4B3QDwB4B/QDAN4B/QCAd0A/AOAd0A8AeCdY+hnvbR9oKhnvbc9XBXPwR0EgnwRLPwNNJeNd8weaShzS8R+7RAhxnqklcK8f/OlQABCQS/24f4xNRHdlyUBTifMQ5Fk/RDrJr81xLRKJwFAFOJFL/bh8jFp5uH3JprcWVu6fv7Xj288eKXn+0xvqvlAebkfW/O3Q/IGd0iEoz/oxyijWp3OAHJJj/bixMfjW8k3cYBztriwZP3Rzr5a9fngr3U3VYA/zsxKRLlQDAJwc6we5szH4Xt1aUTCmcL2adArnVj/MSnfpWkJExoN+AEdyrx/kwsbghsoVG9o3seGGyhXjve3dNSXD7Tf31oiHIPfjD2ellEw/1KJN0A8gJ/f6cWNjcEPlClFACHVXlgy339xdKdQP1sslq+Q96Adf4Oiw0BEAUM7148bGoHP9MnkwpnDdG0RTOOImNLmGGF9/7WX8wYHxB3DEh/tvBx8pO/PqOlE4+EjZeG9714aS4bZvd22ghyDuMid8ab/AoYXVD2UPwAH0Azjiw+8/0ZW3fVn7IyN8Qb74ovZH0ZW3IYRE+gGAQOHD8wdt99xohLfvubFtRTrcc2PbCjMGIdS1ocQIhWwYAGRKsJ7fAYBwAfoBAO+AfgDAO6AfAPAO6AcAvAP6AQDvgH4AwDugHwDwTrD0kwf/A/MxnUA8BeryiSDufjhZAsYP+SFY+nHhf0A+Iu3UJYK1BwdfP9wN70A/4SBY+nHhf0B0KcdtaoP1DKhL/bg6BAQCH/STnf8B2aXE+75Zx0E/QP7wQT/Z+R/gXYqalOBbK8aJ9/Re0MR2gWo0am9tz0nD81EQpuQuo5BPOLnzN3yREruLJNNszo6OZBpm2Kaaw90SEnDEn/lbFv4H+PUP3hmp1T6shwE3gVGaaBNSe89g2keB3ihVlpe7uI86I4l+sH2BVYUbj+Kayu6rS6YRbgBKbU8NZIY/+snC/4DoCPw9eckhiLN/rp2AmQ1y0rjbRJ6bV7jfPf+MmAjqECF7qr8zAwiZhvw24J0jf3AE5PimH6/+B5TDB7PdOYnEaIQpTZTGtX7YvIXRD26VKsqL60coE0ODoKIM8EE/2fkfEN0CuwCiRiNWVtwEVAflphHtLG/LWEt/hfPyElMoL/M3Ij+v2VgDhWmEw7apR42Z5wFu8EE/2fgfcL+SiQk/eQlMfNsKL7Kp4qk0XP3gKYkOTl+D49fqmnD8IaZT1BiiMrcPuB+CkVtVHcYf8QfFNB1wxgf9gP8BUDSA/wEAeCdYzx8AQLgA/QCAd0A/AOAd0A8AeAf0AwDeAf0AgHdAPwDgHdAPAHgnWPrJg/9B5sDyacA1wdJPxv4HRPcmt9JiE/M7MNgPAN4Jln4y9T+gj0QiEUZRTmYJsHwa8E7I/Q/IAxEtThoiuDFLAP0A3gm1/wEVz65sk5gliAsE+wHANaH2P+Au9KHX98uvfsB+AMiGEPsf4OC9klqOyVl1KS8Q7AcA14Ta/8CC6ZWcTixSENgPAN4Jt/+BCS0N673ILEFaINgPAK4Jpf8BNf1hR5Z0jNgsQVQg2A8AmQD+BwDgHfA/AADvBOv5AwAIF6AfAPAO6AcAvAP6AQDvgH4AwDugHwDwDugHALwD+gEA78wd/cCjZUDu8U0/Hz67xAruc1GPulGPhEpdBiQL7+jlBADgklzq58iRI5cvX3aTsvWXt0neyuBsiGW/l+5WL9OPk0eCG2B8m4vkUj+7d+9ubm5OJpPyZB8+vUQf3qkP7xzv1Ya7awYObehte/zDp5fgQZiZGGKiqqKqKv5gs2T4cKUfgUeCG0A/c5Ec62d0dPTll18+f/68JNkHT5fq412S8MHTpeLcWDeNqooaFaxYYz0G5GYG9mtMgviyPHp9ERmPxcAMcC6RY/0ghJLJpKZpZ86cESX7oKJUH26ThIbymyW14Es5zTU+1pa+trAYjwEHMwO270dVamqISYUXD+PPXCT3+kEIDQ0NVVVVjY2NcZO9U1GqDzRZoXX9Qkng5DcFY+nGfEE4iHA8BpwXY1NLQ8mRJJ1MFA/6mZPkXj+pVEo+/rSuX6D3akZoXb9QH9jJDcPdNXz9WPM2bGd6+r3zOm1uv8cUxNEJ64+FxYN+5iQ51k8ikXC8/nn9l7fpvTV6b03r+oXGCzaIxYNQ+r4BMYmi3zMeA+7MDLALIGae5hAP+pmL+HD/raH8r/XuDa3rF+rdldwgFw9C5gwN66z0e6GhoUszA3sMcnn/AKsT7h/MJXz4/ef5H9/Uun6h3r2BG5zFAwCBwZ/nDxrUv5WEAjcGADwzd55/A4DcA/oBAO8Y+vn/tAH8bS1DRt8AAAAASUVORK5CYII=" alt="" />

  3、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池

java web学习总结(十六) -------------------数据库连接池
 1 package me.gacl.util;
2
3 import java.io.InputStream;
4 import java.sql.Connection;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7 import java.sql.Statement;
8 import java.util.Properties;
9 import javax.sql.DataSource;
10 import org.apache.commons.dbcp.BasicDataSourceFactory;
11
12 /**
13 * @ClassName: JdbcUtils_DBCP
14 * @Description: 数据库连接工具类
15 * @author: 孤傲苍狼
16 * @date: 2014-10-4 下午6:04:36
17 *
18 */
19 public class JdbcUtils_DBCP {
20 /**
21 * 在java中,编写数据库连接池需实现java.sql.DataSource接口,每一种数据库连接池都是DataSource接口的实现
22 * DBCP连接池就是java.sql.DataSource接口的一个具体实现
23 */
24 private static DataSource ds = null;
25 //在静态代码块中创建数据库连接池
26 static{
27 try{
28 //加载dbcpconfig.properties配置文件
29 InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
30 Properties prop = new Properties();
31 prop.load(in);
32 //创建数据源
33 ds = BasicDataSourceFactory.createDataSource(prop);
34 }catch (Exception e) {
35 throw new ExceptionInInitializerError(e);
36 }
37 }
38
39 /**
40 * @Method: getConnection
41 * @Description: 从数据源中获取数据库连接
42 * @Anthor:孤傲苍狼
43 * @return Connection
44 * @throws SQLException
45 */
46 public static Connection getConnection() throws SQLException{
47 //从数据源中获取数据库连接
48 return ds.getConnection();
49 }
50
51 /**
52 * @Method: release
53 * @Description: 释放资源,
54 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
55 * @Anthor:孤傲苍狼
56 *
57 * @param conn
58 * @param st
59 * @param rs
60 */
61 public static void release(Connection conn,Statement st,ResultSet rs){
62 if(rs!=null){
63 try{
64 //关闭存储查询结果的ResultSet对象
65 rs.close();
66 }catch (Exception e) {
67 e.printStackTrace();
68 }
69 rs = null;
70 }
71 if(st!=null){
72 try{
73 //关闭负责执行SQL命令的Statement对象
74 st.close();
75 }catch (Exception e) {
76 e.printStackTrace();
77 }
78 }
79
80 if(conn!=null){
81 try{
82 //将Connection连接对象还给数据库连接池
83 conn.close();
84 }catch (Exception e) {
85 e.printStackTrace();
86 }
87 }
88 }
89 }
java web学习总结(十六) -------------------数据库连接池

  测试DBCP数据源

java web学习总结(十六) -------------------数据库连接池
 1 package me.gacl.test;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import org.junit.Test;
7 import me.gacl.util.JdbcUtils_DBCP;
8
9 public class DataSourceTest {
10
11 @Test
12 public void dbcpDataSourceTest() {
13 Connection conn = null;
14 PreparedStatement st = null;
15 ResultSet rs = null;
16 try{
17 //获取数据库连接
18 conn = JdbcUtils_DBCP.getConnection();
19 String sql = "insert into test1(name) values(?)";
20 st = conn.prepareStatement(sql);
21 st.setString(1, "gacl");
22 st.executeUpdate();
23 //获取数据库自动生成的主键
24 rs = st.getGeneratedKeys();
25 if(rs.next()){
26 System.out.println(rs.getInt(1));
27 }
28 }catch (Exception e) {
29 e.printStackTrace();
30 }finally{
31 //释放资源
32 JdbcUtils_DBCP.release(conn, st, rs);
33 }
34 }
35 }
java web学习总结(十六) -------------------数据库连接池

3.3、C3P0数据源

  C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。

  c3p0与dbcp区别
  1. dbcp没有自动回收空闲连接的功能
  2. c3p0有自动回收空闲连接功能

3.4、在应用程序中加入C3P0连接池

  1.导入相关jar包
       c3p0-0.9.2-pre1.jar、mchange-commons-0.2.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-0.9.2-pre1.jar
  2、在类目录下加入C3P0的配置文件:c3p0-config.xml

    c3p0-config.xml的配置信息如下:

java web学习总结(十六) -------------------数据库连接池
 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 c3p0-config.xml必须位于类路径下面
4 private static ComboPooledDataSource ds;
5 static{
6 try {
7 ds = new ComboPooledDataSource("MySQL");
8 } catch (Exception e) {
9 throw new ExceptionInInitializerError(e);
10 }
11 }
12 -->
13
14 <c3p0-config>
15 <!--
16 C3P0的缺省(默认)配置,
17 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源
18 -->
19 <default-config>
20 <property name="driverClass">com.mysql.jdbc.Driver</property>
21 <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property>
22 <property name="user">root</property>
23 <property name="password">XDP</property>
24
25 <property name="acquireIncrement">5</property>
26 <property name="initialPoolSize">10</property>
27 <property name="minPoolSize">5</property>
28 <property name="maxPoolSize">20</property>
29 </default-config>
30
31 <!--
32 C3P0的命名配置,
33 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源
34 -->
35 <named-config name="MySQL">
36 <property name="driverClass">com.mysql.jdbc.Driver</property>
37 <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property>
38 <property name="user">root</property>
39 <property name="password">XDP</property>
40
41 <property name="acquireIncrement">5</property>
42 <property name="initialPoolSize">10</property>
43 <property name="minPoolSize">5</property>
44 <property name="maxPoolSize">20</property>
45 </named-config>
46
47 </c3p0-config>
java web学习总结(十六) -------------------数据库连接池

  如下图所示:

  aaarticlea/png;base64,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" alt="" />

  3、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池

java web学习总结(十六) -------------------数据库连接池
 1 package me.gacl.util;
2
3 import java.sql.Connection;
4 import java.sql.ResultSet;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7 import com.mchange.v2.c3p0.ComboPooledDataSource;
8
9 /**
10 * @ClassName: JdbcUtils_C3P0
11 * @Description: 数据库连接工具类
12 * @author: 孤傲苍狼
13 * @date: 2014-10-4 下午6:04:36
14 *
15 */
16 public class JdbcUtils_C3P0 {
17
18 private static ComboPooledDataSource ds = null;
19 //在静态代码块中创建数据库连接池
20 static{
21 try{
22 //通过代码创建C3P0数据库连接池
23 /*ds = new ComboPooledDataSource();
24 ds.setDriverClass("com.mysql.jdbc.Driver");
25 ds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbcstudy");
26 ds.setUser("root");
27 ds.setPassword("XDP");
28 ds.setInitialPoolSize(10);
29 ds.setMinPoolSize(5);
30 ds.setMaxPoolSize(20);*/
31
32 //通过读取C3P0的xml配置文件创建数据源,C3P0的xml配置文件c3p0-config.xml必须放在src目录下
33 //ds = new ComboPooledDataSource();//使用C3P0的默认配置来创建数据源
34 ds = new ComboPooledDataSource("MySQL");//使用C3P0的命名配置来创建数据源
35
36 }catch (Exception e) {
37 throw new ExceptionInInitializerError(e);
38 }
39 }
40
41 /**
42 * @Method: getConnection
43 * @Description: 从数据源中获取数据库连接
44 * @Anthor:孤傲苍狼
45 * @return Connection
46 * @throws SQLException
47 */
48 public static Connection getConnection() throws SQLException{
49 //从数据源中获取数据库连接
50 return ds.getConnection();
51 }
52
53 /**
54 * @Method: release
55 * @Description: 释放资源,
56 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
57 * @Anthor:孤傲苍狼
58 *
59 * @param conn
60 * @param st
61 * @param rs
62 */
63 public static void release(Connection conn,Statement st,ResultSet rs){
64 if(rs!=null){
65 try{
66 //关闭存储查询结果的ResultSet对象
67 rs.close();
68 }catch (Exception e) {
69 e.printStackTrace();
70 }
71 rs = null;
72 }
73 if(st!=null){
74 try{
75 //关闭负责执行SQL命令的Statement对象
76 st.close();
77 }catch (Exception e) {
78 e.printStackTrace();
79 }
80 }
81
82 if(conn!=null){
83 try{
84 //将Connection连接对象还给数据库连接池
85 conn.close();
86 }catch (Exception e) {
87 e.printStackTrace();
88 }
89 }
90 }
91 }
java web学习总结(十六) -------------------数据库连接池

  测试C3P0数据源

java web学习总结(十六) -------------------数据库连接池
 1 package me.gacl.test;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import org.junit.Test;
7 import me.gacl.util.JdbcUtils_C3P0;
8 import me.gacl.util.JdbcUtils_DBCP;
9
10 public class DataSourceTest {
11
12 @Test
13 public void c3p0DataSourceTest() {
14 Connection conn = null;
15 PreparedStatement st = null;
16 ResultSet rs = null;
17 try{
18 //获取数据库连接
19 conn = JdbcUtils_C3P0.getConnection();
20 String sql = "insert into test1(name) values(?)";
21 st = conn.prepareStatement(sql);
22 st.setString(1, "gacl");
23 st.executeUpdate();
24 //获取数据库自动生成的主键
25 rs = st.getGeneratedKeys();
26 if(rs.next()){
27 System.out.println(rs.getInt(1));
28 }
29 }catch (Exception e) {
30 e.printStackTrace();
31 }finally{
32 //释放资源
33 JdbcUtils_C3P0.release(conn, st, rs);
34 }
35 }
36 }
java web学习总结(十六) -------------------数据库连接池

四、配置Tomcat数据源

  在实际开发中,我们有时候还会使用服务器提供给我们的数据库连接池,比如我们希望Tomcat服务器在启动的时候可以帮我们创建一个数据库连接池,那么我们在应用程序中就不需要手动去创建数据库连接池,直接使用Tomcat服务器创建好的数据库连接池即可。要想让Tomcat服务器在启动的时候帮我们创建一个数据库连接池,那么需要简单配置一下Tomcat服务器。

4.1、JNDI技术简介

  JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.naming包,
  
套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需
通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。

  Tomcat服务器创建的数据源是以JNDI资源的形式发布的,所以说在Tomat服务器中配置一个数据源实际上就是在配置一个JNDI资源,通过查看Tomcat文档,我们知道使用如下的方式配置tomcat服务器的数据源:

java web学习总结(十六) -------------------数据库连接池
1 <Context>
2 <Resource name="jdbc/datasource" auth="Container"
3 type="javax.sql.DataSource" username="root" password="XDP"
4 driverClassName="com.mysql.jdbc.Driver"
5 url="jdbc:mysql://localhost:3306/jdbcstudy"
6 maxActive="8" maxIdle="4"/>
7 </Context>
java web学习总结(十六) -------------------数据库连接池

  服务器创建好数据源之后,我们的应用程序又该怎么样得到这个数据源呢,Tomcat服务器创建好数据源之后是以JNDI的形式绑定到一个JNDI容器中的,我们可以把JNDI想象成一个大大的容器,我们可以往这个容器中存放一些对象,一些资源,JNDI容器中存放的对象和资源都会有一个独一无二的名称,应用程序想从JNDI容器中获取资源时,只需要告诉JNDI容器要获取的资源的名称,JNDI根据名称去找到对应的资源后返回给应用程序。我们平时做javaEE开发时,服务器会为我们的应用程序创建很多资源,比如request对象,response对象,服务器创建的这些资源有两种方式提供给我们的应用程序使用:第一种是通过方法参数的形式传递进来,比如我们在Servlet中写的doPost和doGet方法中使用到的request对象和response对象就是服务器以参数的形式传递给我们的。第二种就是JNDI的方式,服务器把创建好的资源绑定到JNDI容器中去,应用程序想要使用资源时,就直接从JNDI容器中获取相应的资源即可。

  对于上面的name="jdbc/datasource"数据源资源,在应用程序中可以用如下的代码去获取

1 Context initCtx = new InitialContext();
2 Context envCtx = (Context) initCtx.lookup("java:comp/env");
3 dataSource = (DataSource)envCtx.lookup("jdbc/datasource");

  此种配置下,数据库的驱动jar文件需放置在tomcat的lib下

  aaarticlea/png;base64,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*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" alt="" />

4.2、配置Tomcat数据源

  1、在Web项目的WebRoot目录下的META-INF目录创建一个context.xml文件

  如下图所示:

  aaarticlea/png;base64,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" alt="" />

  2、在context.xml文件配置tomcat服务器的数据源

java web学习总结(十六) -------------------数据库连接池
 1 <Context>
2 <Resource
3 name="jdbc/datasource"
4 auth="Container"
5 type="javax.sql.DataSource"
6 username="root"
7 password="XDP"
8 driverClassName="com.mysql.jdbc.Driver"
9 url="jdbc:mysql://localhost:3306/jdbcstudy"
10 maxActive="8"
11 maxIdle="4"/>
12 </Context>
java web学习总结(十六) -------------------数据库连接池

  3、将数据库的驱动jar文件需放置在tomcat的lib下

  aaarticlea/png;base64,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*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" alt="" />

  4、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中获取JNDI容器中的数据源

java web学习总结(十六) -------------------数据库连接池
 1 package me.gacl.util;
2
3 import java.sql.Connection;
4 import java.sql.ResultSet;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7 import javax.naming.Context;
8 import javax.naming.InitialContext;
9 import javax.sql.DataSource;
10
11 /**
12 * @ClassName: JdbcUtils_DBCP
13 * @Description: 数据库连接工具类
14 * @author: 孤傲苍狼
15 * @date: 2014-10-4 下午6:04:36
16 *
17 */
18 public class JdbcUtils_JNDI {
19
20 private static DataSource ds = null;
21 //在静态代码块中创建数据库连接池
22 static{
23 try{
24 //初始化JNDI
25 Context initCtx = new InitialContext();
26 //得到JNDI容器
27 Context envCtx = (Context) initCtx.lookup("java:comp/env");
28 //从JNDI容器中检索name为jdbc/datasource的数据源
29 ds = (DataSource)envCtx.lookup("jdbc/datasource");
30 }catch (Exception e) {
31 throw new ExceptionInInitializerError(e);
32 }
33 }
34
35 /**
36 * @Method: getConnection
37 * @Description: 从数据源中获取数据库连接
38 * @Anthor:孤傲苍狼
39 * @return Connection
40 * @throws SQLException
41 */
42 public static Connection getConnection() throws SQLException{
43 //从数据源中获取数据库连接
44 return ds.getConnection();
45 }
46
47 /**
48 * @Method: release
49 * @Description: 释放资源,
50 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
51 * @Anthor:孤傲苍狼
52 *
53 * @param conn
54 * @param st
55 * @param rs
56 */
57 public static void release(Connection conn,Statement st,ResultSet rs){
58 if(rs!=null){
59 try{
60 //关闭存储查询结果的ResultSet对象
61 rs.close();
62 }catch (Exception e) {
63 e.printStackTrace();
64 }
65 rs = null;
66 }
67 if(st!=null){
68 try{
69 //关闭负责执行SQL命令的Statement对象
70 st.close();
71 }catch (Exception e) {
72 e.printStackTrace();
73 }
74 }
75
76 if(conn!=null){
77 try{
78 //将Connection连接对象还给数据库连接池
79 conn.close();
80 }catch (Exception e) {
81 e.printStackTrace();
82 }
83 }
84 }
85 }
java web学习总结(十六) -------------------数据库连接池

  写一个Servlet测试JNDI数据源

java web学习总结(十六) -------------------数据库连接池
 1 package me.gacl.test;
2
3 import java.io.IOException;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import me.gacl.util.JdbcUtils_JNDI;
12
13 public class JNDITest extends HttpServlet {
14
15 public void doGet(HttpServletRequest request, HttpServletResponse response)
16 throws ServletException, IOException {
17 Connection conn = null;
18 PreparedStatement st = null;
19 ResultSet rs = null;
20 try{
21 //获取数据库连接
22 conn = JdbcUtils_JNDI.getConnection();
23 String sql = "insert into test1(name) values(?)";
24 st = conn.prepareStatement(sql);
25 st.setString(1, "gacl");
26 st.executeUpdate();
27 //获取数据库自动生成的主键
28 rs = st.getGeneratedKeys();
29 if(rs.next()){
30 System.out.println(rs.getInt(1));
31 }
32 }catch (Exception e) {
33 e.printStackTrace();
34 }finally{
35 //释放资源
36 JdbcUtils_JNDI.release(conn, st, rs);
37 }
38 }
39
40 public void doPost(HttpServletRequest request, HttpServletResponse response)
41 throws ServletException, IOException {
42 doGet(request, response);
43 }
44
45 }
java web学习总结(十六) -------------------数据库连接池