C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的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>
<!--通过实现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>
在Hibernate(spring管理)中的配置:
<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是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Spring框架中,我们可以利用C3P0连接池来管理数据库连接,提升系统的效率。下面我们将详细讲解如何引用外部文件配置C3P0...
三、C3P0配置与使用 1. 配置文件:C3P0的配置通常通过`c3p0.properties`文件或者在代码中通过`ComboPooledDataSource`类进行设置,包括数据库驱动、URL、用户名、密码,以及连接池参数如初始、最小、最大连接数等。...
C3P0的集成使得Hibernate能够利用C3P0的数据源管理功能,提供更灵活的连接配置和自动管理机制,如连接测试、空闲检测和自动扩展。 【描述】"executable-war.zip,一个覆盖战争的工具,允许它成为自执行的。一个Maven...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在hibernate.cfg.xml文件中添加以下配置: ```xml <property name="c3p0.min_size">5 <property name="c3p0.max_size">30...
- **连接池管理**:为了提高性能,建议为每个数据库配置合适的连接池,如C3P0、HikariCP等。 - **分离读写**:如果数据库有读写分离的需求,可以为读库和写库配置不同的`SessionFactory`。 7. **注意事项** - **...
6. **连接池集成**:Spring支持多种连接池,如C3P0、HikariCP和DBCP,这些连接池可以提高应用性能,避免频繁创建和销毁数据库连接。 7. **代码示例**:博客可能包含实际的Java代码片段,展示如何使用JdbcTemplate...
2. 数据源配置:MyBatis支持多种数据源,如JDBC、C3P0、Druid等,需要在配置文件中指定。 3. 映射文件:mapper.xml文件用于编写SQL语句和结果映射,可以单独存放或嵌入到Java类中。 三、MyBatis SQL语句编写 1. ...
- 数据源配置通常使用C3P0连接池,以提高数据库连接的管理和效率。 3. **整合Spring到Liferay**: - 更新`web.xml`,添加Spring的监听器,以初始化Spring容器。 4. **整合Struts2到Liferay**: - 修改`portlet...
可能会讲解JDBC(Java Database Connectivity)API的使用,包括连接池的配置(如C3P0、DBCP或HikariCP)、SQL语句的执行以及结果集的处理。 4. **框架应用**:Spring框架是Java Web开发的核心,它提供了依赖注入、...
对于Tomcat服务器的配置,除了常规的web应用部署外,还需要在`conf`目录下配置连接池,例如通过修改`context.xml`文件来设置数据源,确保应用程序能够正确地访问数据库。 论坛的功能模块可能包括: 1. 用户注册与...
在Java中,常用的连接池实现有Apache的DBCP、C3P0以及HikariCP等。 描述中提到的用户名为"root",密码为"kof2",这是MySQL的默认管理员账户,通常用于执行数据库的管理和配置操作。在实际应用中,出于安全考虑,应...
数据库连接池如HikariCP、C3P0用于管理数据库连接,提高效率。 3. **API设计**:服务端通过定义清晰的API接口与客户端进行通信。遵循REST原则,利用HTTP方法(GET、POST、PUT、DELETE等)和状态码,确保接口的可...
2. JDBC连接管理:使用连接池(如Apache DBCP或C3P0)优化数据库连接的获取和释放。 3. Servlet处理:定义Servlet类,覆盖doGet/doPost方法,处理HTTP请求,调用业务服务层处理数据。 4. JSP页面:使用EL...
8. **数据库连接池**:在SSM项目中,通常会使用数据库连接池如C3P0或Druid来管理数据库连接,提高系统的性能和资源利用率。 【其他潜在知识点】 9. **前端技术**:虽然未直接提及,但考虑到这是一个Web系统,前端...
所以,本文设计中对于RS-485与RS-232的转换采用了无源的转换方式,而非常规的RS-232与RS-485标准转换,既便是与PC相连的终端单元掉电,也不会影响系统中其它单元的正常通信。 图2为接口电路的原理图。在图中的上半...
8. **连接池**:在实际应用中,通常使用连接池(如C3P0、HikariCP、Apache DBCP等)来管理和复用数据库连接,提高系统性能。 压缩包中的"AvaliacaoJDBC-main"可能是项目的主目录或入口文件,可能包含了源代码、配置...