Tomcat中的数据源------>数据库连接池
Tomcat 中的数据源技术
一、概述:
- 数据源技术的核心原理
- 在一个对象池 (也成数据库连接池 Connection Pool) 中 保存多个数据库连接对象
- 之后在进行数据库操作时,就不需要自己创建数据库连接对象,并且自己负责关闭数据库连接
- 而是直接从数据库连接池中取出一个数据库连接对象来用,用完之后再放回数据库连接池中,等待其他用户继续使用
- Tomcat4.1.x 版本之后都支持数据库连接池技术,开发者可以直接使用 Tomcat 容器中所提供的数据库连接池,来管理数据库连接对象 (即 DatabaseConnection 对象)
- 如果不想使用 Tomcat 中提供的数据库连接池,也可以使用其他三方组件提供的数据库连接池,如 Apache 组织的 C3P0 组件实现了数据库连接池功能。
二、如何使用 Tomcat 中提供的数据库连接池(编程思路 ----> 概述)
- step1,首先要了解数据库连接池相关的一些概念
- 最小连接数:没有用户连接至该网站时,池中应该维持的最小数据库连接数
- 最大连接数:池中可以维持的最大数据库连接数
- 最大等待时间:当池中没有可用的数据库连接时,用户首先要等待一段时间,如果等待的时间内有其他数据库连接被释放了,则该用户就可以获取并使用其他用户释放的数据库连接对象。但是如果等待的时间超出了“最大等待时间”,则用户无法取得数据库连接,程序报错。
- step2,明确下面的三件事:
- 数据库连接池其实就是一个存放了若干数据库连接对象的池子,并且可以控制其最小连接数、最大连接数、最大等待时间等特性,并且支持数据库连接对象数目的动态变化,
- 可以使用 java 程序编写出拥有上述功能的数据库连接池
- 也可以使用 Tomcat 中已经实现的数据库连接池
- 或者也可以使用其他三方组件所实现的数据库连接池 (如 Apache 的 C3P0 组件)
- step3,我们这里使用的是 Tomcat 中已经实现的数据库连接池,下面讲述如何在自己的 project 中使用 Tomcat 中的数据库连接池
- step3.1,客户端程序通过查询 JNDI 上的 key 获得一个 DataSource 对象
- step3.2,通过 DATASource 对象取得 ConnectionPool 中保存的一个数据库连接
- step3.3,使用 step3.2 中获取的数据库连接对象实例化 PreparedStatement 对象
- step3.4,执行相应的 SQL 语句,将执行结果存放至 ResultSet 对象中
三、使用 Tomcat 中已经实现的数据库连接池(编程思路 ----> 具体编程)
- step1, 配置Tomcat 安装目录 /conf/server.xml 文件,在 Tomcat 容器中为你的 project 创建一个 数据库连接池实例对象
-
如上所述,在 Tomcat 的 server.xml 中为自己的 project 创建了一个数据库连接池,并且设定了该数据库连接池的最小和最大连接数、用户最大等待时间。并且配置了该数据库连接池中所存放的数据库连接对象的驱动程序、DBURL、数据库连接用户名和密码。
-
-
step2,配置自己的 project 的 web.xml,指明自己的 project 想要使用的数据库连接池名称(即数据源名称)
-
-
step1 中在 Tomcat 安装目录下的 conf/server.xml 中通过相应配置,为你的 Project 创建了一个数据库连接池。 并且由 Tomcat 容器负责管理该数据库连接池对象实例,以及数据库连接池中的数据库连接对象
-
下面就需要在你自己的 project 的 web.xml 中也添加相应的配置,告诉你的 project 中的程序,如果想要使用数据库连接操作数据库的话,就从 Tomcat 所维持的数据库连接池中获取相应的数据库连接对象
-
-
-
-
step3, 在客户端程序中从数据库连接池获取数据库连接对象,并且使用完该连接对象后重新将其释放至数据库连接池
-
-
step3.1,初始化名称查找上下文:Context
-
step3.2,通过 server.xml 中配置的数据源名称(也即数据库连接池名称)查找 DataSource 对象 (也即数据库连接池对象)
-
step3.3,从上述数据库连接池中获取一个数据库连接对象(也即通过 DataSource 对象获取 Connection 对象)
-
step3.4,使用上述数据库连接对象 (也即 Connection 对象)
-
step3.5, 释放上述 Connection 对象,将其放回数据库连接池中,等待后面的用户使用
-
实例一,在 jsp 页面中通过 DataSource 获取 Connection 对象,并且使用后释放该对象
-
-
实例二,在 java 程序中(如持久层代码中)通过 DataSource 获取 Connection 对象,并且使用后释放该对象
-
-
-