连接池与数据源
传统数据库连接方式的不足:
需要经常与数据库建立连接
在访问结束后必须要关闭连接释放资源
当并发访问数量较大时,网站速度受到极大影响
系统的安全性和稳定性相对较差
连接池技术工作原理
连接池中的连接:
连接池是由容器提供的,用来管理池中连接对象
应用程序从连接池中获得连接
在桌面应用中,可以使用第三方的库来实现连接池
而在Web容器中,一般使用数据源来获取和管理数据库连接
数据源(DataSource):
-javax.sql.DataSource负责建立与数据库的连接
-从Tomcat的数据源获得连接
-把连接保存在连接池中
如何获得DataSource对象
-数据源由Tomcat提供
-使用JNDI获得DataSource引用
访问数据源:
1->配置context.xml文件:Tomcat的conf文件夹下,添加Resource
2->配置web.xml文件:web.xml中指定resource-ref与context.xml的名称一致
3->添加数据库驱动文件:加入到Tomcat的lib中
4->进行代码编写,实现查找数据源:lookup()参数的写法
使用数据源后,应用不再直接创建连接,而是向连接池申请连接
使用连接完毕后,容器会释放连接
连接池将释放的连接收回,并等待其他应用线程使用
1.Tomcat的conf/context.cml中的配置
<Context>
<Resource name="jdbc/registration"
auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/register?useUnicode=true&characterEncoding=utf-8"
/>
</Context>
/*
name 指定resource的JNDI名称
auth 指定管理Resource的Manager
type 指定Resource所属的Java类
maxActive 指定连接池中处于活动状态的数据库连接的最大数目
maxldle 指定连接池中处于空闲状态的数据库连接的最大数目
maxWait 指定连接池中的连接处于空闲的最长时间
*/
2.添加数据库驱动文件
-把数据库驱动的.jar文件,加入到Tomcat的lib中
注:
驱动文件必须放到Tomcat全局的lib目录中
不能放到应用自己的/WEB-INF/lib目录中去
可以同时存在多个不同数据库的驱动文件
3.应用程序的web.xml文件的配置
-在web.xml中配置<resource-ref>
<resource-ref>
//指定JNDI的名字,与<Resource>元素中的name一致
<res-ref-name>jdbc/registration</res-ref-name>
//指定引用资源的类名,与<Resource>元素中的type一致
<res-type>javax.sql.DataSource</res-type>
//指定管理所引用资源的Manager与<Resource>元素中的auth一致
<res-auth>Container</res-auth>
</resource-ref>
4.查找数据源
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class BaseDao{
public Connextion getConnection(){
Context ctx;
try{
ctx = new InitialContext();
//获取与逻辑名相关联的数据源对象
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/news");
conn = ds.getConnection();
}catch(SQLException exception){
exception.printStackTrace();
}catch(NamingException namingException){
namingException.printStackTrace();
}
}
}