(二十一)配置三种开源数据库连接池

目录


前言

一般连接池不需要我们自己写!有开源组织为我们提供了一些连接池 ;

常见的有:

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 下面的配置中 ;要一并删掉 ;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值