传智播客java学习--jdbc连接池

我今天学习了连接池,是冯威老师讲的,我做了简单的笔记:

数据库连接池:
为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

目前有两种常用的数据源连接池:
JDBC 的数据库连接池使用 javax.sql.DataSource 来表示,DataSource 只是一个接口,该接口通常由服务器(Weblogic, WebSphere, Tomcat)提供实现,也有一些开源组织提供实现:
DBCP 数据库连接池
C3P0 数据库连接池
DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池

 

1.连接池:存放多个数据库连接,
 初始化连接数,最小空闲数,最大空闲数,最大连接数,
 超过最大连接数,就处于等待状态,
 超时时间,

2.DBCP数据源,itcast1130datesource
 使用DBCP连接池:
******方法一********
        需要引入commons-dbcp.jar;commons-pool.jar两个包,
                再引入mysql驱动;
  BasicDataSource bds=new BasicDataSource();
  bds.setUsername("root");
  bds.setPassword("root");
  bds.setDriverClassName("com.mysql.jdbc.Driver");
  bds.setUrl("jdbc:mysql://localhost:3306/test");
  bds.setInitialSize(4);//初始化连接数
  bds.setMinIdle(5);//最小空闲数,防止当洪峰到来时,再次申请连接引起的   性能开销;
  bds.setMaxIdle(7);//最大空闲数,放洪峰过后,连接池中的连接过多,
  bds.setMaxActive(10);//最大连接数
  bds.setMaxWait(5000);//最大等待时间5秒 ,设为-1表示无限期;
 
  Connection conn=bds.getConnection(); //获取连接
 
  if(rs!=null) rs.close();//关闭连接
  if(stmt!=null) stms.close;//关闭连接
  if(conn!=null) conn.close();//不是关闭连接,把连接重新放入连接池

*****方法二*******
  Properties prop=new Properties();
  prop.setProperty("driverClassName","com.mysql.jdbc.Driver");
  prop.setProperty("password","root");
  prop.setProperty("username","root");
  prop.setProperty("url","jdbc:mysql://localhost:3306/test");
  prop.setProperty("minIdle", "4");
  prop.setProperty("maxIdle", "6");
  prop.setProperty("maxWait", "5000");
  prop.setProperty("maxActive ", "20");
  DateSource dateSource=BasicDataSourceFactory.createDateSource(prop);

 
*****分散配置_资源文件*******
jdbc.peoperties
driverClassName=com.mysql.jdbc.Driver
passwordroot
username=root
url=jdbc:mysql://localhost:3306/test
minIdle=4
maxIdle=6
maxWait=5000
maxActive=20

主方法:
//读取资源文件**方法一,资源文件必须放置于TestDBCP03文件的相同路径下;
//利用反射机制读取:
InputStream inStream=TestDBCP03.class.getResourceAsStream("jdbc.properties");
Properties prop=new Properties();
prop.load(inStream);
DateSource dateSource=BasicDataSourceFactory.createDateSource(prop);
读取方法二:

 


**********************************
通用的DBManager    datesource/dbcp04

**********************************

3.使用C3P0数据源:
  引入c3p0-jar包;
  ComboPooledDataSource cpds=new CombolPooledDataSource();
  cpds.setDriverClass("com.mysql.jdbc.Driver");
  cpds.setJdbcUrl("jdbc:mysql://loclahost:3306/test");/
  cpds.setUser("root");
  cpds.setPassword("root");
  cpds.setMinPoolSize(5);//最小连接数
  cpds.setAcquireIncrement(10);//每次申请连接的数量
  cpds.setMaxPoolSize(20);//最大连接数
  //获取连接
  cpds.getConnection();
 

**********************************

JNDI:java命名和目录服务;

************************************
在tomcat中配置连接池:

在tomcat中配置所有web应用都能使用的连接连接池:

在tomcat服务器下面的conf/context.xml中的<Context>中增加如下配置
 <Context>
  <Resource name="jdbc/mysql" auth="Container"
            type="javax.sql.DataSource" username="root"                            password="root"
            driverClassName="com.mysql.jdbc.Driver"                         url="jdbc:mysql://localhost:3306/test"
            maxActive="8" maxIdle="4"/>
 </Context>
将mysql 的驱动jar包放到tomcat的lib目录下面;

配置好后,在jsp页面使用数据源,

<%@ page import="javax.naming.InitialContext"%>//java的命名服务
<%
Context initCtx=new InitialContext();
Context envCtx=initCtx.lookup("java:comp/evn");
//在tomcat服务器的环境命名上下文中查找数据源(连接池对象)
DateSource dateSource=(DateSource)enCtx.lookup("jdbc/mysql");
//获取连接
Connection conn=dateSource.getConnection();
String sql="select id from employees";
PreparedStatement pstm=conn.prepareStatmenr(sql);
//执行sql语句
//关闭连接

%>

**配置当前的web应用使用的连接池,**

在tomcat服务器的/conf下创建文件夹catalina/localhost
在文件夹下面增加XXX.xml文件;
在xml文件中增加<context docBase="e:/work/1130/WebRoot" reloadable="true">

 <Resource name="jdbc/mysql" auth="Container"
            type="javax.sql.DataSource" username="root"                            password="root"
            driverClassName="com.mysql.jdbc.Driver"                               url="jdbc:mysql://localhost:3306/test"
            maxActive="8" maxIdle="4"/>
 </Context>

</context>

//reloadable=true表示当前web应用发生变化时,自动重新加载


总结:今天学的知识点比较的多,总体上来说,主要讲了两种数据库连接池的使用:dbcp和c3p0,现在用dbcp连接池的比较多,还有在服务器里面配置连接池,这里面涉及到jndi命名服务的使用,先主要掌握dbcp的用法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值