zoukankan      html  css  js  c++  java
  • (二十一)配置三种开源数据库连接池

    目录


    前言

    一般连接池不需要我们自己写!有开源组织为我们提供了一些连接池 ;
    
    常见的有:
    
    1、DBCP 数据库连接池
    
    2、C3P0 数据库连接池
    
    3、Tomcat内置的连接池(其实也是通过dbcp实现的)
    

    DBCP

    DBCP数据源(就是数据库连接池)
    
    ·DBCP是Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用软件应在系统中增加如下两个jar文件:
    
        ·Commons-dbcp.jar :连接池的实现
    
        ·Commons-pool.jar :接池实现的额依赖库
    
        ·Commons-logging.jar :还需要这个依赖(老方当年还不需要导入这个jar包·)
    
    ·Tomcat的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可以由应用程序独立使用 ;
    
    • 使用方法:(java 代码:)
    
     private static BasicDataSource dataSource ;
    
             static {
    
                try {
    
                    Properties properties = new Properties();
                        // 关联配置文件   
                    properties.load(JdbcDbcpUtils.class.getResourceAsStream("/ijava/xin/properties/dbcpconfig.properties"));
                        // 读取配置文件
                    dataSource = BasicDataSourceFactory.createDataSource(properties) ;
    
                  } catch (Exception e) {
    
                       throw new ExceptionInInitializerError(e) ;
    
                }
             }
    
    
    • 配置文件写法
    
    #连接设置
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql:///user?useUnicode=true&characterEncoding=UTF8
    username=root
    password=root
    
    #<!-- 初始化连接 -->
    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=READ_COMMITTED
    
    

    C3P0

    C3P0数据源 ( Spring 内置的连接池)
    

    需要我们给它一个配置文件,否则我们就只能在在代码中进行指定配置;

    该配置文件的名字,必须是 c3p0-config.xml ;

    并且这个配置文件的路径,必须是在 src根目录 下面,也就是说 在 src/xxx/ 下面 都不行。。。

    • 代码
      private static ComboPooledDataSource comboPooledDataSource;
    
        static {
            try {
    //            有配置文件的情况下,可直接根据参数获取对应的配置;
    //            不写参数,就是使用默认配置
                comboPooledDataSource = new ComboPooledDataSource();
    
    //            没有配置文件的情况下,需要自己手动添加配置
    //            comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
    //            comboPooledDataSource.setJdbcUrl("jdbc:mysql:///user");
    //            comboPooledDataSource.setUser("root");
    //            comboPooledDataSource.setPassword("root");
    //            comboPooledDataSource.setMaxPoolSize(30);
    //            comboPooledDataSource.setMinPoolSize(5);
    //            comboPooledDataSource.setInitialPoolSize(10);
    
            } catch (Exception e) {
                throw new ExceptionInInitializerError(e);
            }
        }
    • 配置文件
    
    <c3p0-config>
        <!--默认配置-->
        <default-config>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///user</property>
            <property name="user">root</property>
            <property name="password">root</property>
    
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">20</property>
            <property name="minPoolSize">5</property>
            <property name="maxStatements">200</property>
        </default-config>
    
        <named-config name="mysql">
            <property name="acquireIncrement">50</property>
            <property name="initialPoolSize">100</property>
            <property name="minPoolSize">50</property>
            <property name="maxPoolSize">1000</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->
            <property name="maxStatements">0</property>
            <property name="maxStatementsPerConnection">5</property>
            <!--下面可以写一些覆盖配置,即默认配置不符合你的要求,你可以修改不符合你要求的部分-->
        </named-config>
    
        <named-config name="oracle">
            <property name="acquireIncrement">50</property>
            <property name="initialPoolSize">100</property>
            <property name="minPoolSize">50</property>
            <property name="maxPoolSize">1000</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->
            <property name="maxStatements">0</property>
            <property name="maxStatementsPerConnection">5</property>
        </named-config>
    </c3p0-config>
    
    

    Tomcat内置数据源

    配置Tomcat数据源
    
    
        其实在我们需要使用数据库连接池的时候,我们大可不必添加第三方的jar包;因为我们的Tomcat内部内置了连接池 ;
    
    
    
    有3种方法配置:
    
        1、在服务器里面用Context文件里面配置 (不可取)
    
        2、在服务器里面的catelina 里边加上一个配置文件 (不可取)
    
        3、我们可以发现前两种,方法都需要去改动服务器 ; 第三种则是在web目录下面新建一个 MATE-INF ,下面新建一个context.xml文件,在里面配置连接池 ;
    
    • 配置文件写法

      配置文件写法:在`tomcat`的服务器首页有 :
      
       a、先点击 JDBC DataSource 
      
       b、再点击 JNDI Resource  里面找 ;
      
            <Context>
                  ...
                   <Resource name="jdbc/EmployeeDB"
                          auth="Container"
                          type="javax.sql.DataSource"
                          username="dbusername"
                          password="dbpassword"
                          driverClassName="org.hsql.jdbcDriver"
                          url="jdbc:HypersonicSQL:database"
                          maxActive="8"
                          maxIdle="4"/>
                  ...
              </Context>
      但是这种写法也有问题的,必须将mysql的驱动,加到tomcat的服务器里面。而不是项目里面,相对其他2种方法,这是改动服务器最少的方法了 ;
      

    连接关闭问题

    使用了数据库连接池框架以后,就不再需要我们去关注连接的关闭问题了,框架自己会将用完的连接放回到连接池里面;

    但是使用了事务的连接,还是需要我们自己去关闭的 ;


    备注

    清理服务器的时候,注意不是仅仅将服务器 webApps 下面的应用删掉就好了,还要注意应用是否产生了一些文件在 conf 下面的配置中 ;要一并删掉 ;

  • 相关阅读:
    python 全栈开发,Day13(迭代器,生成器)
    python 全栈开发,Day12(函数的有用信息,带参数的装饰器,多个装饰器装饰一个函数)
    python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)
    关于1024:堆栈下溢的错误(1024. Stack Underflow Occurred)
    Quick 3.3 final 加载ccs的变化
    Quick 3.3 的代码资源加密
    quick code ide设置分辨率
    quick3.3rc1导入工程到ADT
    lua 基本语法
    as3 阻止后续侦听器
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665700.html
Copyright © 2011-2022 走看看