`

C3P0数据源的常规配置

阅读更多

   C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3jdbc2扩展规范说明的Connection Statement 池的DataSources 对象。

  C3P0概念

   checkout :从池中取得可用的连接

   checkoutconnection:被使用的连接

   checkin:把连接放回池中

   checkinconnection:没有被使用的连接

   所有超时设置,相关的连接,是物理连接的关闭,而不是连接返回池中

   管理的是pooledconnection,而不是物理的connection

   pooledconnection是sun针对连接池的接口,它本身包含connection,和这个connection相关的所有statement,result,一个checkout的connection所作的所有数据库操作,都被pooledconnection所管理.

   statement缓存,主要针对PreparedStatement和CallableStatement,statment缓存主要相对一个connection来说的,不同connection的statment不能通用. 

 

常规配置文件

 <default-config>
  <!--当连接池中的连接耗尽的时候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>
  <!--通过实现ConnectionTesterQueryConnectionTester的类来测试连接。类名需制定全路径。
  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>
  <!--初始化时获取三个连接,取值应在minPoolSizemaxPoolSize之间。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而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatementsmaxStatementsPerConnection均为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提交的
  时候都将校验其有效性。建议使用idleConnectionTestPeriodautomaticTestTable
  等方法来提升连接测试的性能。Default: false -->
  <property name="testConnectionOnCheckout">false</property>
  <!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->
  <property name="testConnectionOnCheckin">true</property>
  <!--用户名。Default: null-->
  <property name="user">root</property>
  在Hibernatespring管理)中的配置:
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <property name="driverClass"><value>oracle.jdbc.driver.OracleDriver</value></property>
  <property name="jdbcUrl"><value>jdbc:oracle:thin:@localhost:1521:Test</value></property>
  <property name="user"><value>Kay</value></property>
  <property name="password"><value>root</value></property>
  <!--连接池中保留的最小连接数。-->
  <property name="minPoolSize" value="10" />
  <!--连接池中保留的最大连接数。Default: 15 -->
  <property name="maxPoolSize" value="100" />
  <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
  <property name="maxIdleTime" value="1800" />
  <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
  <property name="acquireIncrement" value="3" />
  <property name="maxStatements" value="1000" />
  <property name="initialPoolSize" value="10" />
  <!--60秒检查所有连接池中的空闲连接。Default: 0 -->
  <property name="idleConnectionTestPeriod" value="60" />
  <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
  <property name="acquireRetryAttempts" value="30" />
  <property name="breakAfterAcquireFailure" value="true" />
  <property name="testConnectionOnCheckout" value="false" />
  </bean>
  ###########################
  ### C3P0 Connection Pool###
  ###########################
  #hibernate.c3p0.max_size 2
  #hibernate.c3p0.min_size 2
  #hibernate.c3p0.timeout 5000
  #hibernate.c3p0.max_statements 100
  #hibernate.c3p0.idle_test_period 3000
  #hibernate.c3p0.acquire_increment 2
  #hibernate.c3p0.validate false
  在hibernate.cfg.xml文件里面加入如下的配置:
  <!-- 最大连接数 -->
  <property name="hibernate.c3p0.max_size">20</property>
  <!-- 最小连接数 -->
  <property name="hibernate.c3p0.min_size">5</property>
  <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
  <property name="hibernate.c3p0.timeout">120</property>
  <!-- 最大的PreparedStatement的数量 -->
  <property name="hibernate.c3p0.max_statements">100</property>
  <!-- 每隔120秒检查连接池里的空闲连接,单位是秒-->
  <property name="hibernate.c3p0.idle_test_period">120</property>
  <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
  <property name="hibernate.c3p0.acquire_increment">2</property>
  <!-- 每次都验证连接是否可用 -->
  <property name="hibernate.c3p0.validate">true</property>

 

分享到:
评论

相关推荐

    引用外部文件配置C3P0连接池.zip

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Spring框架中,我们可以利用C3P0连接池来管理数据库连接,提升系统的效率。下面我们将详细讲解如何引用外部文件配置C3P0...

    c3p0--0.9.1.2.src.rar

    三、C3P0配置与使用 1. 配置文件:C3P0的配置通常通过`c3p0.properties`文件或者在代码中通过`ComboPooledDataSource`类进行设置,包括数据库驱动、URL、用户名、密码,以及连接池参数如初始、最小、最大连接数等。...

    hibernate-c3p0-4.3.0.Beta5.zip

    C3P0的集成使得Hibernate能够利用C3P0的数据源管理功能,提供更灵活的连接配置和自动管理机制,如连接测试、空闲检测和自动扩展。 【描述】"executable-war.zip,一个覆盖战争的工具,允许它成为自执行的。一个Maven...

    hibernate连接池配置

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在hibernate.cfg.xml文件中添加以下配置: ```xml &lt;property name="c3p0.min_size"&gt;5 &lt;property name="c3p0.max_size"&gt;30...

    hibernate同时配置多个数据库连接

    - **连接池管理**:为了提高性能,建议为每个数据库配置合适的连接池,如C3P0、HikariCP等。 - **分离读写**:如果数据库有读写分离的需求,可以为读库和写库配置不同的`SessionFactory`。 7. **注意事项** - **...

    第十一章 Spring4 JDBC

    6. **连接池集成**:Spring支持多种连接池,如C3P0、HikariCP和DBCP,这些连接池可以提高应用性能,避免频繁创建和销毁数据库连接。 7. **代码示例**:博客可能包含实际的Java代码片段,展示如何使用JdbcTemplate...

    深入浅出MyBatis技术原理与实战

    2. 数据源配置:MyBatis支持多种数据源,如JDBC、C3P0、Druid等,需要在配置文件中指定。 3. 映射文件:mapper.xml文件用于编写SQL语句和结果映射,可以单独存放或嵌入到Java类中。 三、MyBatis SQL语句编写 1. ...

    liferay 基于struts2+hibernate+spring

    - 数据源配置通常使用C3P0连接池,以提高数据库连接的管理和效率。 3. **整合Spring到Liferay**: - 更新`web.xml`,添加Spring的监听器,以初始化Spring容器。 4. **整合Struts2到Liferay**: - 修改`portlet...

    Java Web典型模块与项目实战大全源代码26

    可能会讲解JDBC(Java Database Connectivity)API的使用,包括连接池的配置(如C3P0、DBCP或HikariCP)、SQL语句的执行以及结果集的处理。 4. **框架应用**:Spring框架是Java Web开发的核心,它提供了依赖注入、...

    javaweb bbs论坛开发

    对于Tomcat服务器的配置,除了常规的web应用部署外,还需要在`conf`目录下配置连接池,例如通过修改`context.xml`文件来设置数据源,确保应用程序能够正确地访问数据库。 论坛的功能模块可能包括: 1. 用户注册与...

    java_connetto_Mysql.rar_MYSQL_ROOT_java mysql

    在Java中,常用的连接池实现有Apache的DBCP、C3P0以及HikariCP等。 描述中提到的用户名为"root",密码为"kof2",这是MySQL的默认管理员账户,通常用于执行数据库的管理和配置操作。在实际应用中,出于安全考虑,应...

    管理系统系列--管理系统服务端.zip

    数据库连接池如HikariCP、C3P0用于管理数据库连接,提高效率。 3. **API设计**:服务端通过定义清晰的API接口与客户端进行通信。遵循REST原则,利用HTTP方法(GET、POST、PUT、DELETE等)和状态码,确保接口的可...

    学生信息管理系统jdbc+servlet+jsp+easyui

    2. JDBC连接管理:使用连接池(如Apache DBCP或C3P0)优化数据库连接的获取和释放。 3. Servlet处理:定义Servlet类,覆盖doGet/doPost方法,处理HTTP请求,调用业务服务层处理数据。 4. JSP页面:使用EL...

    基于Java+ssm的房屋租赁系统毕业设计与实现源码+数据库.zip

    8. **数据库连接池**:在SSM项目中,通常会使用数据库连接池如C3P0或Druid来管理数据库连接,提高系统的性能和资源利用率。 【其他潜在知识点】 9. **前端技术**:虽然未直接提及,但考虑到这是一个Web系统,前端...

    RS485与PC机通信

    所以,本文设计中对于RS-485与RS-232的转换采用了无源的转换方式,而非常规的RS-232与RS-485标准转换,既便是与PC相连的终端单元掉电,也不会影响系统中其它单元的正常通信。 图2为接口电路的原理图。在图中的上半...

    AvaliacaoJDBC

    8. **连接池**:在实际应用中,通常使用连接池(如C3P0、HikariCP、Apache DBCP等)来管理和复用数据库连接,提高系统性能。 压缩包中的"AvaliacaoJDBC-main"可能是项目的主目录或入口文件,可能包含了源代码、配置...

Global site tag (gtag.js) - Google Analytics