一、基本概念

  数据库连接池负责分配、管理和释放数据库连接

  数据库连接池:(池用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 {@Testpublic 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>

  3、将数据库的驱动jar文件需放置在tomcat的lib下

  4、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中获取JNDI容器中的数据源

  见孤傲苍狼大神的博客: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();}}}

转载于:https://www.cnblogs.com/jiangbei/p/6701414.html

JavaWeb基础—数据库连接池DBCP、C3P0相关推荐

  1. javaweb mysql 连接池 c3p0 配置_JavaWeb基础—数据库连接池DBCP、C3P0

    一.基本概念 数据库连接池负责分配.管理和释放数据库连接 数据库连接池:(池用map来实现居多) 用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子) 二.编写实现数据库连接池 池参数: 初识 ...

  2. javaweb使用 数据库连接池 DBCP,实现对数据库驱动使用优化,多个 action共用一个数据库连接

    本文着重理解DBCP以及连接池基本运行原理(步骤) 首先我们要知道在连接数据库时 如果频繁的对数据库进行连接,然后又将它释放,对项目的访问效率是一种绝对的降低, 因为在这个过程中,连接(校验密码用户名 ...

  3. 主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)

    http://developer.51cto.com/art/201807/579402.htm 主流数据库连接池 常用的主流开源数据库连接池有C3P0.DBCP.Tomcat Jdbc Pool.B ...

  4. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    转载自  常用数据库连接池 (DBCP.c3p0.Druid) 配置说明 1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的 ...

  5. 数据库连接池 (DBCP、c3p0、Druid) 配置说明和对比

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出. 对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据 ...

  6. Java数据库连接池--DBCP浅析

    转载自   Java数据库连接池--DBCP浅析 前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用 ...

  7. mysql dbcp 配置文件_数据库连接池DBCP使用方式

    数据库连接池DBCP使用方式 概念 开源数据源实现,使用这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了. 开源数据源包含DBCP.C3P0.Druid等 DBCP Java使用实例 ...

  8. 数据库连接池 DBCP和c3p0数据库连接池

    一.数据库连接池 1. 什么是连接池 传统的开发模式下,Servlet处理用户的请求,找Dao查询数据,dao会创建与数据库之间的连接,完成数据查询后会关闭数据库的链接. 这样的方式会导致用户每次请求 ...

  9. 数据库连接池——DBCP连接池o

    DBCP 1.什么是DBCP? DBCP是Apache提供的一款开源免费的数据库连接池! Hibernate3.0之后不再对DBCP提供支持!因为Hibernate声明DBCP有致命的缺欠!DBCP因 ...

最新文章

  1. XingXingMVC页面跳转处理
  2. 【数字信号处理】周期序列 ( 周期序列定义 | 周期序列示例 )
  3. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)
  4. 【论文解读】CVPR 2021 | 旷视提出GID:用于目标检测的通用实例蒸馏
  5. python写xml文件_用python写xml文件
  6. [Unity3d]Unity Mathf 数学运算(C#)
  7. C#设计模式-单例模式
  8. iOS开发之适配http请求
  9. 关于input type=hidden/标签的记录
  10. 基于react做了一个仿qq空间
  11. 用html语言写一个环形,html5环形流程图可添加流程图代码
  12. linux模拟http请求命令
  13. 关于 HSF框架 (一)简单介绍
  14. Latex表格排版大全 基于 IEEE双栏论文(设置单元格行列间距,自动换行设置)
  15. Python 批量转换视频音频采样率(附代码) | Python工具
  16. 什么是搜索引擎优化(SEO)
  17. 07-微信小程序商城 精品推荐(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
  18. 6SE70变频器自由功能块定义
  19. Excel中比vlookup函数还要好用的自动填表功能
  20. 开发小程序需要服务器吗?小程序服务器配置有什么要求?

热门文章

  1. Linux属于下面哪一种软件,【单选题】下面软件中属于自由软件开放源码的是( )。 A. Unix B. Linux C. Mi...
  2. java listmode_java中图形界面ListModel的用法?方法如何调用?
  3. Matlab中*和.*区别
  4. 堆(heap)与栈(stack)的区别(二)
  5. Pycharm如何设置自定义背景颜色
  6. 无线通信信号自由空间损耗
  7. AXI4-Stream协议总结
  8. opencv-python视频处理之图片变成视频,视频切成图片
  9. 五花八门的Shell 的相关概念和配置方法
  10. virtualbox+vagrant学习-2(command cli)-16-vagrant snapshot命令