Cheug's Blog

当前位置:网站首页 / SQL / 正文

数据库连接池

2019-06-08 / SQL / 1022 次围观 / 0 次吐槽 /

连接池原理:

        image.png

        目的:解决建立数据库连接耗费资源和时间很多的问题,提高性能。

常用的数据库连接池

DBCPDataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开

commons-dbcp-1.4.jar

       commons-pool-1.5.6.jar

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

       c3p0-0.9.1.2.jar

    DBCP使用

    使用步骤:

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

       添加属性资源文件

  在src中创建dbconfig.properties文件

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

  编写数据源工具类

image.png

    C3P0的使用

            使用步骤:

            1、添加jar

            2、编写配置文件c3p0-config.xml,放在classpath中,或classes目录中

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day12</property>
<property name="user">root</property>
<property name="password">123456</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
  </default-config>
</c3p0-config>

    编写工具类

            image.png


JNDI

Ø JNDI(Java Naming and Directory Interface)是一个应用程序设计的API

Ø 为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口

Ø 类似JDBC都是构建在抽象层上。

Ø 现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。

   Tomcat中配置JNDI 数据源

    开发JavaWeb应用,必须使用一个JavaWeb服务器,JavaWeb服务器都内置数据源。这种配置就是JDNI

    Tomcat 内置了数据源就是:(DBCP,所以数据源只需要配置服务器即可

        image.png

  配置数据源的步骤:

    Step1:拷贝数据库连接驱动的jar到tomcat的lib目录下

                    image.png

    注意:如果出现java.lang.AbstractMethodError:com.mysql.jdbc.Connection.isValid(I)Z的问题,使用更高版本的数据库连接驱动

    Step2配置数据源XML文件

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

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

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/DB"
            auth="Container"
            type="javax.sql.DataSource"
            username="root"
            password="123456"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/DB"
            maxTotal="8"
            maxIdle="4"/>
</Context>

    Step3使用连接池

image.png

            多个数据源的配置

            Ø 声明多个Resource即可


                数据源:DataSource,可以理解成【数据库连接池】


数据库连接池实现3种方式

  1. DBCP 【推荐,Oracle数据库也用DBCP】

  2. C3P0 【C3P0一般与Hibernate一起使用】

  3. JNDI 【tomcat内置的一个DBCP】

Powered By Cheug's Blog

Copyright Cheug Rights Reserved.