JavaWeb基础—数据库连接池DBCP、C3P0
2017-04-12 21:16
387 查看
一、基本概念
数据库连接池负责分配、管理和释放数据库连接
数据库连接池:(池用map来实现居多)
用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子)
二、编写实现数据库连接池
池参数:
初识大小(招10个老师)
最小空闲连接数(小于3个时招人)
增量(一次创建的最小单位)(一次招5个)
最大空闲连接数(老师数多于12时销毁)
最大连接数(最大就招20人,超过也不招人了,等)
最大等待时间(等的时间太长没人归还就抛异常)
连接池也是通过四大参数以及相关jar包等
连接池一般不自己实现(那要崩溃,又不稳定)
使用commons-dbcp.jar(数据库连接池) 它依赖commons-pool.jar
(之前的io包,beanutils(依赖logging.jar包)等)commons被称为第二API
连接池必须实现javax.sql.DataSource接口(1.4开始的规范)通常使用无参的构造器
第三方的包都已经被实现,池参数都有默认值
但是!四大参数必须自己提供!
一般地,有两大开源的数据源实现:dbcp c3p0
步骤:
获得连接池对象(BasicDataSource)
设置四大参数
设置池参数
得到连接对象(close()方法是归还,不是销毁)
1.dbcp的小Demo(了解)
2.c3p0 (大多开源项目的支持,JNDI的实现)
C3P0:
免费开源的数据库连接池,功能强大,性能优越,【推荐】
连接需要两个jar包(不需要oracal那个jar包)
ComboPooledDataSource为连接池对象,方法步骤与上大同小异!
C3P0可以有一个配置文件,但配置文件必须满足要求。可以使用使用命名配置
<named-config name="">
必须叫c3p0-config.xml
必须在src下
具体的配置见下图
配置文件模板
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!--四大参数-->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<!--池参数-->
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">2</property>
<property name="maxPoolSize">5</property>
<property name="minPoolSize">2</property>
</default-config>
</c3p0-config>
使用连接池,重写JdbcUtils(day18)
这里做出一个简单的重写
三、JNDI
JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.naming包,
这 套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需 通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。
JNDI(Java Naming and Directory Interface,Java命名和目录接口)
Tomcat配置数据库连接池(JNDI的手段来得资源)在tomcat/conf/catalina/localhost下创建与项目同名的xml配置文件
其它方法见百度
(百度的博客里的另外的方法)
1、在Web项目的WebRoot目录下的META-INF目录创建一个context.xml文件
2、在context.xml文件配置tomcat服务器的数据源
[b]3、将数据库的驱动jar文件需放置在tomcat的lib下[/b]
[b]4、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中获取JNDI容器中的数据源[/b]
见孤傲苍狼大神的博客:http://www.cnblogs.com/xdp-gacl/p/4002804.html
采用之前的方式
,小的配置文件示例:
<Context>
<Resource name="jdbc/dataSource" auth="Container"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"/>
</Context>
name:资源名称,注意命名规范
auth:可不要
factory:固定,不要去变
type:类型,也就是c3p0包名
其他的东西都是资源的参数
获取资源的方法
Context iniCtx = new InitialContext();
Context envCtx = (Context)iniCtx.lookup("java:comp/env");//固定
//二次查找
//MyBean bean = (MyBean)envCtx.lookup("bean/MyBeanFactory");
writer.println("foo = "+bean.getFoo()+",bar = "+bean.getBar());
例如(注意在项目点lib下导包):
数据库连接池负责分配、管理和释放数据库连接
数据库连接池:(池用map来实现居多)
用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子)
二、编写实现数据库连接池
池参数:
初识大小(招10个老师)
最小空闲连接数(小于3个时招人)
增量(一次创建的最小单位)(一次招5个)
最大空闲连接数(老师数多于12时销毁)
最大连接数(最大就招20人,超过也不招人了,等)
最大等待时间(等的时间太长没人归还就抛异常)
连接池也是通过四大参数以及相关jar包等
连接池一般不自己实现(那要崩溃,又不稳定)
使用commons-dbcp.jar(数据库连接池) 它依赖commons-pool.jar
(之前的io包,beanutils(依赖logging.jar包)等)commons被称为第二API
连接池必须实现javax.sql.DataSource接口(1.4开始的规范)通常使用无参的构造器
第三方的包都已经被实现,池参数都有默认值
但是!四大参数必须自己提供!
一般地,有两大开源的数据源实现:dbcp c3p0
步骤:
获得连接池对象(BasicDataSource)
设置四大参数
设置池参数
得到连接对象(close()方法是归还,不是销毁)
1.dbcp的小Demo(了解)
package com.commons.dbcptest; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp2.BasicDataSource; import org.junit.Test; /** * 用于测试commons的dbcp的类 * @author jiangbei01 * */ public class Demo02 { @Test public void fun1() throws SQLException{ /* * 得到连接池对象 * 设置四大参数 * 设置池参数 * 得到连接对象 */ BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("root"); dataSource.setPassword("root"); //使用的为默认池参数 Connection con = dataSource.getConnection(); System.out.println(con.getClass().getName()); //把连接归还给池 con.close(); } }
2.c3p0 (大多开源项目的支持,JNDI的实现)
C3P0:
免费开源的数据库连接池,功能强大,性能优越,【推荐】
连接需要两个jar包(不需要oracal那个jar包)
ComboPooledDataSource为连接池对象,方法步骤与上大同小异!
C3P0可以有一个配置文件,但配置文件必须满足要求。可以使用使用命名配置
<named-config name="">
必须叫c3p0-config.xml
必须在src下
具体的配置见下图
配置文件模板
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!--四大参数-->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<!--池参数-->
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">2</property>
<property name="maxPoolSize">5</property>
<property name="minPoolSize">2</property>
</default-config>
</c3p0-config>
使用连接池,重写JdbcUtils(day18)
这里做出一个简单的重写
package cn.itcast.jdbcutils; import java.sql.Connection; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtils { //使用的是默认的配置信息,注意给出c3p0-config.xml配置文件 private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); public static Connection getConnection() throws SQLException{ return dataSource.getConnection(); } /** * 大方一点,给出连接池对象给你 */ public static ComboPooledDataSource getDataSource(){ return dataSource; } }
三、JNDI
JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.naming包,
这 套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需 通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。
JNDI(Java Naming and Directory Interface,Java命名和目录接口)
Tomcat配置数据库连接池(JNDI的手段来得资源)在tomcat/conf/catalina/localhost下创建与项目同名的xml配置文件
其它方法见百度
(百度的博客里的另外的方法)
1、在Web项目的WebRoot目录下的META-INF目录创建一个context.xml文件
2、在context.xml文件配置tomcat服务器的数据源
1 <Context> 2 <Resource 3 name="jdbc/datasource" 4 auth="Container" 5 type="javax.sql.DataSource" 6 username="root" 7 password="XDP" 8 driverClassName="com.mysql.jdbc.Driver" 9 url="jdbc:mysql://localhost:3306/jdbcstudy" 10 maxActive="8" 11 maxIdle="4"/> 12 </Context>
[b]3、将数据库的驱动jar文件需放置在tomcat的lib下[/b]
[b]4、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中获取JNDI容器中的数据源[/b]
见孤傲苍狼大神的博客:http://www.cnblogs.com/xdp-gacl/p/4002804.html
采用之前的方式
,小的配置文件示例:
<Context>
<Resource name="jdbc/dataSource" auth="Container"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"/>
</Context>
name:资源名称,注意命名规范
auth:可不要
factory:固定,不要去变
type:类型,也就是c3p0包名
其他的东西都是资源的参数
获取资源的方法
Context iniCtx = new InitialContext();
Context envCtx = (Context)iniCtx.lookup("java:comp/env");//固定
//二次查找
//MyBean bean = (MyBean)envCtx.lookup("bean/MyBeanFactory");
writer.println("foo = "+bean.getFoo()+",bar = "+bean.getBar());
例如(注意在项目点lib下导包):
package cn.itcast.servlet; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; /** * 测试JNDI获取资源的Servlet,使用浏览器测试 * @author jiangbei01 * */ public class AServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { //获取上下文对象 Context iniCtx = new InitialContext(); //找出入口 Context envCtx = (Context)iniCtx.lookup("java:comp/env"); //二次查找,找到资源,里面的就是资源名 DataSource dataSource = (DataSource)envCtx.lookup("jdbc/dataSource"); //于是就得到连接了,注意导包 try { Connection con = dataSource.getConnection(); System.out.println(con); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (NamingException e) { e.printStackTrace(); } } }
相关文章推荐
- java 数据库连接池比较(c3p0,dbcp和proxool)
- 【JavaWeb-10】事务、事务特征、隔离级别、连接池、DBCP、C3P0、利用tomcat管理数据源
- JavaWeb-16 JDBC编程进阶(自定义数据源+开源数据源:DBCP、C3P0)
- web day18 事务,数据库连接池(DBCP,C3P0,),DBUtils,装饰模式,Tomcat配置JNDI资源,ThreadLocal,BaseServlet
- JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以c3p0)
- Java基础之 连接池 dbcp c3p0
- JavaWeb--数据库操作及数据库连接池(dbcp连接)
- 传智播客Java web之 JSP基础之指令与标签
- zz[Java基础]关于web.xml配置的详细说明
- 教案:转换课程第4章Java Web技术基础
- 传智播客Java web之 JSP基础之模板与表达式
- Java Web 框架的"甜点"-Java基础-Java-编程开发
- WEB开发技术比较报告-Java基础-Java-编程开发
- Java Web Start入门基础教程
- 传智播客Java web之 XML基础
- 传智播客Java web之 Servlet基础补充
- Java基础:一种实现数据库连接池的方法
- 基础应用:java web三层架构程序实例(组图)
- 数据库连接池c3p0和dbcp中spring中使用的配置
- 在Web应用中动态创建PDF文件-Java基础-Java-编程开发