`
weitd
  • 浏览: 143062 次
  • 性别: Icon_minigender_1
  • 来自: 新都
社区版块
存档分类
最新评论

连接池的配置

 
阅读更多
C3PO数据库连接池
优点:性能比较dbcp好,稳定性也比dbcp强
将C3po跟spring整合
1.导入c3p0-0.9.1.2.jar,commons-logging-1.1.1.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置,用C3PO配置好的数据源
<bean
id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass">
        <value>net.sourceforge.jtds.jdbc.Driver</value>
        </property>
        <property name="jdbcUrl">
<value>jdbc:jtds:sqlserver://localhost:1433/hua</value>
        </property>
        <property name="user">
        <value>sa</value>
        </property>
        <property name="password">
        <value>hua</value>
        </property>
        <property name="minPoolSize">
        <value>15</value>
        </property>
        <property name="acquireIncrement">
        <value>5</value>
        </property>
        <property name="maxPoolSize">
        <value>25</value>
        </property>
        </bean>

3.在dao类中就可以通过
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  DataSource ds=(DataSource)context.getBean("dataSource");
Connection conn=ds.getConnection();
Statement stmt=conn.creatStatement();
ResultSet rs=stmt.executeQuery(sql);

接着介绍一下C3PO的参数
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">3</property>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">30</property>
<!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
<property name="acquireRetryDelay">1000</property>
<!--连接关闭时默认将所有未提交的操作回滚。Default: false -->
<property name="autoCommitOnClose">false</property>
<!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么
  属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试
  使用。Default: null-->
<property name="automaticTestTable">Test</property>
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
  保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
  获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
<property name="breakAfterAcquireFailure">false</property>
<!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
  SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->
<property name="checkoutTimeout">100</property>
<!--通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。
  Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester-->
<property name="connectionTesterClassName"></property>
<!--指定c3p0 libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可
  Default: null-->
<property name="factoryClassLocation">null</property>
<!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.
  (文档原文)作者强烈建议不使用的一个属性-->
<property name="forceIgnoreUnresolvedTransactions">false</property>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod">60</property>
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize">3</property>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime">60</property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize">15</property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
  属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
  如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements">100</property>
<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0  -->
<property name="maxStatementsPerConnection"></property>
<!--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能
  通过多线程实现多个操作同时被执行。Default: 3-->
<property name="numHelperThreads">3</property>
<!--当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0
  的数据源时。Default: null-->
<property name="overrideDefaultUser">root</property>
<!--与overrideDefaultUser参数对应使用的一个参数。Default: null-->
<property name="overrideDefaultPassword">password</property>
<!--密码。Default: null-->
<property name="password"></property>
<!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:
  测试的表必须在初始数据源的时候就存在。Default: null-->
<property name="preferredTestQuery">select id from test where id=1</property>
<!--用户修改系统配置参数执行前最多等待300秒。Default: 300 -->
<property name="propertyCycle">300</property>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
  时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
  等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout">false</property>
<!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->
<property name="testConnectionOnCheckin">true</property>
<!--用户名。Default: null-->
<property name="user">root</property>
<!--早期的c3p0版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数
  允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始
  广泛的被使用,所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到
  支持,但今后可能的版本可能不支持动态反射代理。Default: false-->
DBCP数据连接池
1.导入commons-dbcp.jar,commons-logging-1.1.1.jar,commons-pool.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"> <value>com.mysql.jdbc.Driver</value>
</property>
<property name="url"> <value>jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=utf8</value>
</property>
<property name="username"> <value>root</value> </property>
<property name="password"> <value>root</value> </property>
<property name="initialSize"> <value>3</value> </property>
<property name="maxActive"> <value>100</value> </property>
<property name="maxIdle"> <value>5</value> </property>
<property name="maxWait"> <value>10</value> </property>
</bean>

3.跟上面一样获取数据源
4.参数介绍
Ø BasicDataSource 相关的参数说明
dataSource: 要连接的 datasource (通常我们不会定义在 server.xml)
defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true
defaultReadOnly: 对于数据库是否只能读取, 默认值为 false
driverClassName:连接数据库所用的 JDBC Driver Class,
maxActive: 可以从对象池中取出的对象最大个数,为0则表示没有限制,默认为8
maxIdle: 最大等待连接中的数量,设 0 为没有限制 (对象池中对象最大个数)
minIdle:对象池中对象最小个数
maxWait: 最大等待秒数, 单位为 ms, 超过时间会丟出错误信息
password: 登陆数据库所用的密码
url: 连接数据库的 URL
username: 登陆数据库所用的帐号
validationQuery: 验证连接是否成功, SQL SELECT 指令至少要返回一行
removeAbandoned: 是否自我中断, 默认是 false
removeAbandonedTimeout: 几秒后会自我中断, removeAbandoned 必须为 true
logAbandoned: 是否记录中断事件, 默认为 false
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程,默认-1
testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为false
testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为false
testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false
Ø 在使用DBCP的时候,如果使用默认值,则数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际上就会是无效的数据库连接。因此为了防止获得的数据库连接失效,在使用的时候最好保证:
username: 登陆数据库所用的帐号
validationQuery:SELECT COUNT(*) FROM DUAL
testOnBorrow、testOnReturn、testWhileIdle:最好都设为true
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程
Ø PS:在构造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也会使用GenericObjectPool] 时,会生成一个内嵌类Evictor,实现自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每过timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查对象的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,否则就激活并校验对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。在调用returnObject方法把对象放回对象池,首先检查该对象是否有效,然后调用PoolableObjectFactory 的passivateObject方法使对象处于非活动状态。再检查对象池中对象个数是否小于maxIdle,是则可以把此对象放回对象池,否则销毁此对象
上面两个是基于Apache的开源连接池框架,如果你用的服务器也是Apache的,如:tomcat。建议使用
bonecp数据连接池
1.导入bonecp-0.7.0.jar,commons-logging-1.1.1.jar,google-collections-1.0.jar,log4j-1.2.15.jar,slf4j-api-1.6.0.jar,slf4j-log4j12-1.6.0.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置数据源
<bean id="mainDataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">   
<property name="driverClass" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/com.mysql.jdbc.Driver" />   
<property name="jdbcUrl" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/jdbc:mysql://127.0.0.1/yourdb" />  
<property name="username" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/root"/>  
<property name="password" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/abcdefgh"/>  
<property name="idleConnectionTestPeriod" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/60"/>    
<property name="idleMaxAge" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/240"/>    
<property name="maxConnectionsPerPartition" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/30"/>   
<property name="minConnectionsPerPartition" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/10"/>   
<property name="partitionCount" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/3"/>    
<property name="acquireIncrement" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/5"/>   
<property name="statementsCacheSize" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/100"/>  
<property name="releaseHelperThreads" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/3"/>
</bean> 

3.跟上面一样获取数据源
4.
BoneCP最大的特点就是效率,BoneCP号称是目前市面上最快的Java连接池,从官方的评测来看其效率远远超越了其它同类的Java连 接池产品
高度可扩展, 快速的连接池.  
注:1)不用synchronized 关键字来处理多线程对资源的争用,而是使用 java.util.concurrent 包中的锁机制;
2)首次使用分区机制来分开管理数据库连接;或许还有其他原因。
Callback (hook interceptor) mechanisms on a change of connection state.
利用分区技术提高性能>
允许直接访问一个连接或者语句
智能调整连接池大小
SQL语句缓存支持
支持异步获取数据库连接 (通过返回Future<Connection>的形式
通过释放连接助理进程来释放数据库连接,提高性能.
通过initSQL参数在每次获取连接的时候执行SQL
支持数据库热切换
自动重试失败的数据库操作(当数据库或者网络挂掉的时候)
JMX support
延迟初始化能力(Lazy initialization capable)
自动检测连接可用性 (keep-alives 等)
允许直接通过数据源而不是通过驱动来获取一个新的数据库连接(Allow obtaining of new connections via a datasource rather than via a Driver)
Datasource/Hibernate support capable
Debug支持准确地高亮那些已经得到但是还没有关闭的链接(Debugging hooks to highlight the exact place where a connection was obtained but not closed)
Debug支持展示那些被关闭两次的链接地址堆栈信息(Debugging support to show stack locations of connections that were closed twice. )
支持自定义连接池名称.
干净的代码结构,TestCase代码覆盖率达到100% (over 125 JUnit tests).
免费的,开源的而且都是用java干的,最重要的是有很完整的javadocs支持。(Free, open source and written in 100% pure Java with complete Javadocs).
性能测试报告 可以看看这个http://www.oschina.net/p/bonecp
Proxool数据连接池
1.导入commons-logging.jar,proxool-0.9.0RC3.jar,spring-2.5.6.jar
2.在Spring的"applicationContext.xml"中的dataSource bean定义——
<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
        <value>org.logicalcobwebs.proxool.ProxoolDriver</value>
    </property>
    <property name="url">
        <value>proxool.Pool_dbname</value>
    </property>
</bean>


3.在"web.xml"先配置好Proxool连接池
<servlet>
    <servlet-name>proxoolServletConfigurator</servlet-name>
    <servlet-class>
        org.logicalcobwebs.proxool.configuration.ServletConfigurator
    </servlet-class>
    <init-param>
        <param-name>xmlFile</param-name>
        <param-value>WEB-INF/proxool.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

4.写一个proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
   <proxool>
      <alias>Pool_dbname</alias>
      <driver-url>jdbc:mysql://localhost:3306/dbname</driver-url>
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <driver-properties>
      <property name="user" value="yourname"/>
      <property name="password" value="yourpass"/>
      </driver-properties>
      <house-keeping-sleep-time>60000</house-keeping-sleep-time>
      <maximum-connection-count>20</maximum-connection-count> 
      <minimum-connection-count>2</minimum-connection-count>
      <prototype-count>0</prototype-count>
      <simultaneous-build-throttle>20</simultaneous-build-throttle>
      <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
      <statistics>15s,10m,1d</statistics>
      <statistics-log-level>INFO</statistics-log-level>
   </proxool>
   <proxool>
    <!--可以配置多个库-->
   </proxool>
</proxool-config>

5.最后跟上面一获取数据源
 
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  DataSource ds=(DataSource)context.getBean("dataSource");
 
Connection conn=ds.getConnection();
 
Statement stmt=conn.creatStatement();
 
ResultSet rs=stmt.executeQuery(sql);


6.参数介绍
#alias是别名;
#driver-url是驱动的url,就是连接的url;
#driver-class是驱动的类,就是数据库驱动;
#user和password是设置登陆数据库的用户名和密码
#prototype-count 最少保持的空闲连接数
#maximum-connection-lifetime 最大连接生命周期 默认值:4小时
#maximum-active-time: 最大活动时间 默认值:5分钟
#maximum-connection-count 最大连接数 默认值:15个
#minimum-connection-count 最小连接数 默认值:5个
#house-keeping-sleep-time proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁
#maximum-new-connections 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受
分享到:
评论

相关推荐

    Tomcat连接池配置.doc

    Tomcat 连接池配置详解 Tomcat 连接池配置是 Web 应用程序中一个非常重要的组件,它负责管理和维护数据库连接,确保数据访问的高速和安全性。本文将详细介绍 Tomcat 连接池配置的步骤和原理,帮助读者快速掌握 ...

    weblogic连接池配置数据库断掉重连的问题

    Weblogic 连接池配置数据库断掉重连的问题 在 Weblogic 中,连接池配置数据库断掉重连是一个非常重要的问题。连接池配置是 Weblogic 中的一种机制,用于管理与数据库的连接。然而,在实际应用中,我们经常会遇到...

    weblogic连接池配置

    weblogic连接池配置说明, weblogic8.1连接池配置及简单优化

    数据库连接池配置文件

    context.xml, 数据库连接池配置文

    C3P0连接池配置

    **C3P0连接池配置详解** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特点是轻量级、高效且稳定,广泛应用于各种Java Web应用中。在本文中,我们将深入探讨...

    hibernate 连接池配置详解

    ### Hibernate 连接池配置详解 #### 一、概述 在使用Hibernate进行数据库操作时,合理配置连接池是非常重要的一步。连接池可以帮助我们更高效地管理数据库连接资源,避免频繁创建与销毁数据库连接带来的性能开销。...

    连接池配置文件

    在IT行业中,数据库连接池是优化...总结,连接池配置文件是管理数据库连接的关键,正确配置可以显著提升系统性能并确保资源的有效利用。了解和掌握连接池的工作原理及配置参数,对于构建高效稳定的数据库应用至关重要。

    Java各数据库连接池配置介绍

    **C3P0连接池配置参数详解** 1. `acquireIncrement`:当连接池中的连接耗尽时,一次同时尝试获取的连接数。默认值为3,意味着如果连接池为空,它会一次性尝试获取3个新的连接。 2. `acquireRetryAttempts`:在从...

    tomcat连接池配置

    二、Tomcat连接池配置 1. 添加依赖 在Maven项目中,需要在pom.xml文件中添加HikariCP的依赖: ```xml &lt;groupId&gt;com.zaxxer&lt;/groupId&gt; &lt;artifactId&gt;HikariCP 版本号 ``` 2. 配置context.xml 在Tomcat的...

    proxool连接池配置详解

    ### Proxool连接池配置详解 #### 一、概述 Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,...

    Tomcat5.5连接池配置案例

    本案例聚焦于Tomcat 5.5版本的连接池配置,通过一个具体的JSP项目来展示如何设置和使用连接池。下面我们将详细讲解这个过程。 一、连接池概念 连接池是预创建并管理一定数量的数据库连接,当应用程序需要连接时,...

    proxool连接池配置文件

    项目实用的proxool连接池配置文件,每个标签都有注释,可以直接拿来使用

    c3p0连接池配置使用

    **c3p0连接池配置使用** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用c3p0连接池可以有效地管理和优化数据库连接,提高系统的性能和稳定性。下面将详细介绍c3p0的...

    jsp连接池配置器(自动配置连接池)

    【jsp连接池配置器(自动配置连接池)】是一个实用工具,旨在简化开发人员在Java Web应用程序中配置数据库连接池的过程。通常,手动配置连接池需要编写大量的XML配置文件,如`context.xml`或`web.xml`,以及相关的Java...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置!.pdf

    在进行数据库连接池配置时,需要注意以下几点: 1. 确保数据库驱动版本与数据库版本兼容。 2. `maxActive`属性定义了连接池中最大的活跃连接数,要根据应用程序的实际并发需求来设置。 3. `maxIdle`属性定义了连接...

    Tomcat连接池配置

    **标题**: Tomcat连接池配置 **描述**: Tomcat连接池配置涉及到在Apache Tomcat服务器中设置数据源,以便高效地管理和复用数据库连接。这包括对Oracle和MSSQL Server这两种不同类型的数据库进行配置,并在Java应用...

    c3p0连接池配置

    c3p0连接池配置, 个人找了很多资料 都在.txt里面,有项目完整配置,解释,还有一些相关网站资料等

    javaweb连接池配置

    上次发的javaweb图书管理系统完整版,上传掉了javaweb里面的连接池配置, 怕大家不会配置,所以还是选择上传,好事做到底。 找到Tomcat6.0里面的conf下的server.xml文件,再按照我给的修改

Global site tag (gtag.js) - Google Analytics