几种常见的JDBC连接池管理工具和配置

几种常见的JDBC连接池管理工具和配置

本文简单介绍汇总常见java应用中使用到的JDBC资源池连接管理框架/库和基本的配置使用方式,包括典型的商用中间件和开源库。

商用中间件


BES Application Server


BES应用服务器的JDBC资源池配置都在中间件的domain.config里面,典型的JDBC连接池配置段如下:
    <jdbc-connection-pool connection-validation-method="table" statement-cache-size="0" associate-with-thread="false" connection-leak-reclaim="false" connection-test-period="5000" validate-atmost-once-period-in-seconds="120" max-connection-age="0" lazy-connection-enlistment="false" connection-creation-retry-interval-in-seconds="10" idle-timeout="300" datasource-classname="org.apache.derby.jdbc.ClientDataSource" sql-execution-alarm-threshold="0" is-isolation-level-guaranteed="false" max-pool-size="32" res-type="javax.sql.DataSource" name="DerbyPool" is-connection-validation-required="false" match-connections="false" object-type="user" fail-all-connections="false" ping="false" allow-non-component-callers="false" test-on-borrow="false" statement-timeout-in-seconds="-1" non-transactional-connections="false" lazy-connection-association="false" max-wait-time-in-millis="60000" connection-creation-retry-attempts="0" initial-pool-size="8" wrap-jdbc-objects="true" pooling="true" connection-leak-timeout-in-seconds="0" pool-bump-size="2" statement-leak-reclaim="false" statement-leak-timeout="0">
        <property name="PortNumber" value="1527"/>
        <property name="Password" value="{AES}l81RLwPCVWrFjyA6GP2bkw=="/>
        <property name="User" value="APP"/>
        <property name="serverName" value="localhost"/>
        <property name="DatabaseName" value="bes-appserv-samples"/>
        <property name="connectionAttributes" value=";create=true"/>
        </jdbc-connection-pool>

Oracle Weblogic


Weblogic的JDBC资源池配置在域控制器的config/jdbc子目录下存储,一般每个数据源对应一个xml文件。比如如下典型配置文件(config/jdbc/examples-oracleXA-jdbc.xml):
    <?xml version="1.0" encoding="UTF-8"?>
    <jdbc-data-source xsi:schemaLocation="http://www.bea.com/ns/weblogic/90/domain.xsd" xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls">
    <name>examples-oracleXA</name>
    <jdbc-driver-params>
        <url>jdbc:oracle:thin:@samples:1521:samples</url>
        <driver-name>oracle.jdbc.xa.client.OracleXADataSource</driver-name>
        <properties>
        <property>
            <name>user</name>
            <value>scott</value>
        </property>
        </properties>
        <password-encrypted>{AES}emNi92PHcG8wLa4KwfmcVefacyG2gGu8thii2+ttrew=</password-encrypted>
    </jdbc-driver-params>
    <jdbc-connection-pool-params>
        <test-table-name>dual</test-table-name>
    </jdbc-connection-pool-params>
    <jdbc-data-source-params>
        <jndi-name>examples-dataSource-oracleXAPool</jndi-name>
        <global-transactions-protocol>TwoPhaseCommit</global-transactions-protocol>
    </jdbc-data-source-params>
    </jdbc-data-source>


开源框架

目前社区存在大量的开源JDBC连接池管理框架,常见的有:DBCP 、C3P0、BoneCP、Proxool、DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnectionPoolManager及Druid等–https://www.open-open.com/project/tag/shuju-lianjiechi.html
这些开源库都可以在spring中通过直接配置bean,或者属性文件的方式进行配置。 通过属性文件配置时将连接池的参数放在.properties属性文件,这里可以添加大量自定义参数。参数的读取一般写到applicationContext.xml的文件中,通过org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类将.properties(key/value形式)文件中设定的值在xml中替换为占位该键($key)的值。

DBCP

最新版本为Apache Commons DBCP 2.6.0 for JDBC 4.2 on Java 8 – http://commons.apache.org/proper/commons-dbcp/configuration.html。 通常在spring框架里面配置实用dbcp管理的JDBC池。典型配置如下:


    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">

        
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/spring_database"></property>
        <property name="username" value="root"></property>
        <property name="password" value="362427gg"></property>
    </bean>
    <bean id="userdao" class="com.heima_jdbctemplate_dbcp.UserDao">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    </beans>

C3P0

C3P0是一个封装基础JDBC驱动实现DataSource和连接池管理、支持JNDI绑定的一个简单易用的jdbc池管理库,最新版本为0.9.5.4 – https://github.com/swaldman/c3p0。 通常在spring框架中bean的配置如下:

        <bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/c3p0jdbctemplate"></property>
        <property name="user" value="root"></property>
        <property name="password" value="jay571018"></property>
    </bean>  

Druid

Druid是阿里开源的JDBC资源池管理库,提供了多种数据库的优化,内置包括了SQL Parser、ProxyDriver。提供了监控和数据库密码加密管理的功能-- https://github.com/alibaba/druid。 典型的spring框架中bean配置如下:

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
        <!-- 基本属性 url、user、password -->
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc_url}" />
        <property name="username" value="${jdbc_user}" />
        <property name="password" value="${jdbc_password}" />

        <!-- 配置监控统计拦截的filters -->
        <property name="filters" value="stat" />

        <!-- 配置初始化大小、最小、最大 -->
        <property name="maxActive" value="20" />
        <property name="initialSize" value="1" />
        <property name="minIdle" value="1" />

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000" />     

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />

        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxOpenPreparedStatements" value="20" />
    </bean>

如果需要对密码进行加密,可以使用Druid的ConfigFilter进行加解密和其他设置。详见 https://github.com/alibaba/druid/wiki/使用ConfigFilter

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <property name="url" value="jdbc:derby:memory:spring-test;create=true" />
        <property name="username" value="sa" />
        <property name="password" value="${password}" />
        <property name="filters" value="config" />
        <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publickey}" />
    </bean>

BoneCP/HikariCP

BoneCP和HikariCP都是通过解决池管理环境下资源竞争问题来达到高性能连接管理的目的。目前BoneCP已经deprecated,作者推荐使用HikariCP – https://github.com/brettwooldridge/HikariCP

可以通过如下配置文件(比如jdbc.properties)进行配置:

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/webgate?autoReconnect=true&rewriteBatchedStatements=true
    jdbc.user=webgate
    jdbc.password=111111
    jdbc.testSQL=select 2
    jdbc.minConn=5
    jdbc.maxConn=20
    jdbc.connTimeout=10000

典型的spring框架的bean配置(比如 applicationContext.xml)如下:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>jdbc.properties</value>
            </list>
        </property>
    </bean>


    <bean id="dsHikariCP" class="com.zaxxer.hikari.HikariDataSource" destroy-method="shutdown">
    <property name="driver" value="${jdbc.driver}" />
    <property name="user" value="${jdbc.user}" />
    <property name="password" value="${jdbc.password}" />
    <property name="testSQL" value="${jdbc.testSQL}" />
    <property name="minConn" value="${jdbc.minConn}" />
    <property name="maxConn" value="${jdbc.maxConn}" /> 
    <property name="connTimeout" value="${jdbc.connTimeout}" /> 
    </bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值