使用数据库连接池的目的
在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率.
数据库连接池
- 在内存中开辟一块空间,存放多个数据库连接对象.
- JDBC Tomcat Pool,直接由tomcat 产生数据库连接池.
状态
- active 状态:当前连接对象被应用程序使用中
- Idle 空闲状态 : 等待应用程序使用
注意:
小型项目不适用数据库连接池.
实现JDBC tomcat Pool 的步骤.
1. 在web 项目的META-INF 中存放context.xml
, 在context.xml
编写数据库连接池相关属性;
<?xml version="1.0" encoding="UTF-8"?>
<!--
maxActive="50"
maxIdle="20"
name="test" 数据库连接池的名字
auth="Container" 由tomcat管理数据库连接池
maxWait="10000" 取得Idle状态的对象去转成active状态,等待取得Idle对象的时间,取不到就不取了然后报异常
type="javax.sql.DataSource" 在java中通过name属性取得连接池对象时,他在java中的类型
-->
<Context>
<Resource
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/ssm"
username="root"
password="123456"
maxActive="50"
maxIdle="20"
name="test"
auth="Container"
maxWait="10000"
type="javax.sql.DataSource" />
</Context>
2. tomcat 一启动就会在系统内存中生成数据库连接池;
3. 可以在java 中使用 JNDI(Java Naming and Directory Interface,Java命名和目录接口) 获取数据库连接池中对象
背景知识:
context.xml: 上下文资源文件
Context : 上下文接口,专门获取context.xml文件对象的一个接口
DataSource :数据源,相当于数据库连接池的类型
Context c = new InitialContext();
DataSource s =(DataSource) c.lookup("java:comp/env/test");// test为数据库连接池名字
Connection conn = s.getConnection();
4. 当关闭连接对象时,把连接对象归还给数据库连接池,把状态改变成Idle
JNDI与JDBC的区别
jdbc:java去找数据库驱动
jndi:通过服务器(如Tomcat)的配置文件context
来找数据库驱动
使用起来的区别是:
使用jdbc的话:如果你要修改数据库的相关信息、配置,你必须修改源代码,重新部署程序;
使用jndi的话:只需在服务器中修改相应的xml文件,对代码的影响降到最低
参考:JNDI与Jdbc的区别