一、什么是数据库连接池?
每次页面访问的时候,都需要查询数据库,而每查询一次数据库就需要创建一个数据库连接(connection),使用后还需要关闭连接,释放资源,这些操作会耗费很多的系统资源,而数据库连接池就是在初始化的时候先创建一定数量的数据库连接并放在连接池中,把他们集中管理,供程序使用。在数据库连接池中,使用close()方法并不会真正的关闭连接,而只是将连接的使用权还给了连接池
二、数据库连接池的运行机制
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源
三、连接池与数据源
连接池:
连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象。
连接池自动分配连接对象并对闲置的连接进行回收。
连接池中的连接对象是由数据源(DataSource)创建的。
连接池(Connection Pool)用来管理连接(Connection)对象。
数据源:
数据源(DataSource)用来连接数据库,创建连接(Connection)对象。
java.sql.DataSource接口负责建立与数据库的连接
由Tomcat提供,将连接保存在连接池中。
四、在Tomcat中数据源的配置与使用数据源的方法:
1、配置Tomcat的conf/context.xml
<Resource name="jdbc/news"
auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="root" password="Admin"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/news"/>
name=指定Resource的JNDI名称
auth=指定管理Resource的Manager(Container由容器创建和管理,Application由Web应用创建和管理)
type=指定Resource的java类
maxActive=指定连接池中处于活动状态的数据库连接的最大数量
maxIdle=指定连接池中处于空闲状态的数据库的最大数量
maxWait=指定连接池中连接处于空闲的最长时间,超过这个时间会提示异常,取值为-1,表示可以无限期等待,单位为毫秒(ms)
这里不要忘记:还需要将数据库的驱动jar包添加到,Tomcat安装目录下的lib文件夹中。
2.应用程序下的web-inf/web.xml文件的<web-app>节点中添加:
<resource-ref> <description>Oracle DB Connection</description> <res-ref-name>oracleDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
3.编写代码获取数据源
// 获取数据库连接
public Connection getConnection2() {
try {
//初始化上下文
Context cxt=new InitialContext();
//获取与逻辑名相关联的数据源对象
DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");
conn=ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
五、在项目中数据源的配置:
只需要在WebRoot下面的meta-inf文件夹中创建一个context.xml文件,添加<Context>节点,然后在节点中添加如同上面的代码:
<Resource name="jdbc/news"
auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="root" password="Admin"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/news"/>
这样就不需要在tomcat中配置了