• 连接池原理

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。

现在流行的第三方Java数据库连接池库

  • DBCP

它是Apache推出的Database Connection Pool,属于Apache Commons开源项目,官网:http://commons.apache.org/components.html。Commons的目的是提供可重用的、开源的Java代码。

使用步骤:

> 1 添加jar包  commons-dbcp-1.4.jar  commons-pool-1.5.6.jar

>2  添加属性资源文件,命名:dbcp.properties,文件放在src目录下

  1. #连接设置
  2. driverClassName=com.mysql.jdbc.Driver
  3. url=jdbc:mysql://localhost:3306/database
  4. username=
  5. password=
  6. #<!-- 初始化连接 -->
  7. initialSize=
  8. #最大连接数量
  9. maxActive=
  10. #<!-- 最大空闲连接 -->
  11. maxIdle=
  12. #<!-- 最小空闲连接 -->
  13. minIdle=
  14. #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
  15. maxWait=
  16. #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
  17. #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
  18. connectionProperties=useUnicode=true;characterEncoding=utf8
  19. #指定由连接池所创建的连接的自动提交(auto-commit)状态。
  20. defaultAutoCommit=true
  21. #driver default 指定由连接池所创建的连接的只读(read-only)状态。
  22. #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
  23. defaultReadOnly=
  24. #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
  25. #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
  26. defaultTransactionIsolation=REPEATABLE_READ

> 3 编写数据源工具类

  1. public class DBCPUtil {
  2. //得到数据源
  3. private static DataSource dataSource;
  4. static{
  5. try {
  6. Properties pro = new Properties();
  7. pro.load(DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties"));
  8. //得到连接池对象,同时获取配置文件中的信息给连接池对象使用
  9. dataSource = BasicDataSourceFactory.createDataSource(pro);
  10. } catch (Exception e) {
  11. throw new ExceptionInInitializerError("连接池初始化失败");
  12. }
  13. }
  14. //获取Connection对象的方法
  15. public static Connection getConnection() throws SQLException
  16. {
  17. return dataSource.getConnection();
  18. }
  19. //释放资源,这里的conn.close()是将连接对象放回连接池中,并不是销毁
  20. public static void release(Connection conn){
  21. if(conn!=null){
  22. try {
  23. conn.close();
  24. } catch (SQLException e) {
  25. e.printStackTrace();
  26. }
       }
  27. }
  28. }
  • C3P0

它是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

c3p0与dbcp区别:dbcp没有自动回收空闲连接的功能,c3p0有自动回收空闲连接功能。

使用步骤:

1、添加jar包  c3p0-0.9.1.2.jar,下载位置:http://www.oschina.net/p/c3p0,开源中国中有详细的下载地址。

2、编写配置文件 c3p0-config.xml,文件名固定,不能更改,【C3P0百度百科】有详细配置信息,比较全。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <c3p0-config>
  3. <default-config>
    <!-- 严格使用驼峰命名法,如果不是,将会出错,例如JdbcUrl就会出错。 -->
  4. <property name="driverClass">com.mysql.jdbc.Driver</property>
  5. <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/test</property>
  6. <property name="user"></property>
  7. <property name="password"></property>
  8.  
  9. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
  10. <property name="maxIdleTime">60</property>
  11. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
  12. <property name="idleConnectionTestPeriod">60</property>
  13. <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
  14. <property name="acquireRetryDelay">1000</property>
  15. <!--初始化时获取10个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
  16. <property name="initialPoolSize">0</property>
  17. <!--最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
  18. <property name="maxIdleTime">30</property>
  19. <!--连接池中保留的最大连接数。Default: 15 -->
  20. <property name="maxPoolSize">2</property>
  21. <property name="minPoolSize">0</property>
  22. <property name="maxStatements">200</property>
  23. <user-overrides user="test-user">
  24. <property name="maxPoolSize">10</property>
  25. <property name="minPoolSize">1</property>
  26. <property name="maxStatements">0</property>
  27. </user-overrides>
  28. </default-config>
  29. </c3p0-config>

3、编写工具类

  1. public class C3P0Util {
  2. private static ComboPooledDataSource cpds = new ComboPooledDataSource();
  3. private static int i=1;
  4. public static ComboPooledDataSource getCpds() {
  5. return cpds;
  6. }
  7. public static Connection getConnection(){
  8. Connection conn=null;
  9. try {
  10. conn=cpds.getConnection();
  11. } catch (SQLException e) {
  12. e.printStackTrace();
  13. }
  14. return conn;
  15. }
  16. public static void close(Connection ct){
  17. if(ct!=null){
  18. try {
  19. ct.close();
  20. } catch (SQLException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }
  25. }
  • Tomcat内置连接池

开发JavaWeb应用,必须使用一个JavaWeb服务器,JavaWeb服务器都内置数据源。

数据源只需要配置服务器即可。

配置数据源的步骤:

1、拷贝【数据库连接的jar】到tomcat的lib目录下

2、配置数据源XML文件

  a)如果把配置信息写在tomcat下的conf目录的context.xml中,那么所有应用都能使用此数据源。

  b)如果是在当前应用的META-INF中创建context.xml, 编写数据源,那么只有当前应用可以使用。

  1. <Resource name="jdbc/test"
  2. auth="Container" type="javax.sql.DataSource" maxActive="100"
  3. maxIdle="10" maxWait="-1" username="" password=""
  4. driverClassName="com.mysql.jdbc.Driver"
  5. url="jdbc:mysql://127.0.0.1:3306/test"/>

3、使用连接池

  1. Context initContext = new InitialContext();
  2. DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/test");
  3. Connection conn = ds.getConnection();
  • JNDI:java nameing directory interface

JNDI容器就是一个Map

key(String)

value(Object)

path+name

对象

path+"jdbc/day16"

DataSource对象

Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池的更多相关文章

  1. 开源数据库连接池之Tomcat内置连接池

    本篇介绍几种开源数据库连接池,同时重点讲述如何使用Tomcat服务器内置的数据库连接池. 之前的博客已经重点讲述了使用数据库连接池的好处,即是将多次创建连接转变为一次创建而使用长连接模式.这样能减少数 ...

  2. c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包

    [-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...

  3. 线程池的极简用法——内置线程池multiprocessing

    大家好,今天博主来分享一个线程池的小捷径--内置线程池的使用方法 一.背景 说道多线程,对变成层有了解的小伙伴一定不陌生,虽然不知道是什么但是也会从各大网站.面试分享等途径听说过.这里就不做过多的介绍 ...

  4. 使用Unidac内置连接池

    第一步: 放一个TUniconnection并设置相关属性 之后直接使用TUniconnection对象即可 跟踪unidac源码uni单元1540行中可以看到 Connect方法调用CreateIC ...

  5. 十七 Spring的JDBC模版:使用开源连接池,DBCP,C3P0

    DBCP的配置以及使用 引入jar包

  6. DBCP,C3P0与Tomcat jdbc pool 连接池的比较

    hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect,告诉连接被重置 ...

  7. DBCP、c3p0、Druid三大连接池区别

    DBCP.c3p0.Druid三大连接池区别 一.连接池优势 如果一个项目中如果需要多个连接,如果一直获取连接,断开连接,这样比较浪费资源: 如果创建一个池,用池来管理Connection,这样就可以 ...

  8. 在Tomcat中配置连接池和数据源

    1.DataSource接口介绍 (1)DataSource 概述 JDBC1.0原来是用DriverManager类来产生一个对数据源的连接.JDBC2.0用一种替代的方法,使用DataSource ...

  9. Tomcat上配置连接池{ connect error=Name [jdbc/OracleDB] is not bound in this Context. Unable to find [jdbc]}

    . 在学习期间,从未实践过在tomcat上配置连接池,今天终于实现一次,在tomcat玩了一把,不知道你是否现在有和我一样的困境.废话少说直接上代码   java  public static Con ...

随机推荐

  1. Linux杀死进程,查看进程

    http://blog.csdn.net/wojiaopanpan/article/details/7286430/

  2. 从国内流程管理软件市场份额看中国BPM行业发展

    随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...

  3. Android中的沉浸式状态栏效果

    无意间了解到沉浸式状态栏,感觉贼拉的高大上,于是就是试着去了解一下,就有了这篇文章.下面就来了解一下啥叫沉浸式状态栏.传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这一样就在一定 ...

  4. 转:ORA-15186: ASMLIB error function = [asm_open], error = [1], 2009-05-24 13:57:38

    转:ORA-15186: ASMLIB error function = [asm_open], error = [1], 2009-05-24 13:57:38http://space.itpub. ...

  5. [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)

    数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...

  6. Struts2日期类型转换

    针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...

  7. 将css和js缓存到localStorage缓存,提高网页响应速度

    适用于小站点,这很极致,很快速~~ /** * Created by SevenNight on 2016/9/21 0021. * 插件功能:使用localStorage缓存js和css文件,减少h ...

  8. 微软开放.NET框架源代码和Mono

    微软一直在朝着更加开放的方向努力.例如,公司首席执行官萨特亚纳德拉(Satya Nadella)在Windows 10预览发布会上声称微软喜欢Linux,这并不出人意料,但是对于一家将Linux视作威 ...

  9. 开源一个WEB版本GEF,基于SVG的网页流程图框架

    8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...

  10. [数据库基础]——图解JOIN

    阅读导航 一.概要 二.JOIN分类 三.JOIN分类详解 一.概要 JOIN对于接触过数据库的人,这个词都不陌生,而且很多人很清楚各种JOIN,还有很多人对这个理解也不是很透彻,这次就说说JOIN操 ...