C3P0连接池

C3P0连接池

  • C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

彻底死掉的C3P0

  • 在很长一段时间内,它一直是Java领域内数据库连接池的代名词,当年盛极一时的Hibernate都将其作为内置的数据库连接池,可以业内对它的稳定性还是认可的。C3P0功能简单易用,稳定性好这是它的优点,但是性能上的缺点却让它彻底被打入冷宫。C3P0的性能很差,差到即便是同时代的产品相比它也是垫底的,更不用和Druid、HikariCP等相比了。正常来讲,有问题很正常,改就是了,但c3p0最致命的问题就是架构设计过于复杂,让重构变成了一项不可能完成的任务。随着国内互联网大潮的涌起,性能有硬伤的c3p0彻底的退出了历史舞台。

C3P0与DBCP区别

  • (1)dbcp没有自动回收空闲连接的功能
  • c3p0有自动回收空闲连接功能
  • (2)dbcp需要手动加载配置文件
  • c3p0自动加载

C3P0使用步骤

导入jar包

  • (1)c3p0-0.9.1.2.jar
  • (2)mchange-commons-java-0.2.11.jar
  • (3)mysql驱动包

添加配置文件

  • C3P0是在外部添加配置文件,工具直接进行应用,因为直接引用,所以要求固定的命名和文件位置
    • 文件位置: /src/resource
    • 文件命名:c3p0-config.xml/c3p0.properties
  • c3p0-Config.xml代码示例:
<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置 -->
	<default-config>
		<!-- 基本配置 -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/school</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<!--扩展配置-->
		<!-- 连接超过10秒报错-->
		<property name="checkoutTimeout">10000</property>
		<!--30秒检查空闲连接 -->
		<property name="idleConnectionTestPeriod">30</property>
		<!-- 初始大小 -->
		<property name="initialPoolSize">10</property>
		<!-- 每次增长的个数 -->
		<property name="acquireIncrement">5</property>
		 <!-- 30秒不适用丢弃-->
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">50</property>
		<property name="minPoolSize">5</property>
	</default-config> 
	<!-- 命名的配置 -->
	<named-config name="bj1805">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/day2</property>
		<property name="user">root</property>
		<property name="password">111</property>
		<!-- 如果池中数据连接不够时一次增长多少个 -->
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">20</property>
		<property name="minPoolSize">10</property>
      <property name="maxPoolSize">40</property>
	</named-config>
</c3p0-config> 
  • c3p0.properties代码示例(推荐使用):
#配置信息
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/myschool?useSSL=true
c3p0.user=root
c3p0.password=root
#设置增长的大小
c3p0.acquireIncrement=5
#初始大小
c3p0.initialPoolSize=20
#最小池大小
c3p0.minPoolSize=10
#最大池大小
c3p0.maxPoolSize=40
#超时时间
c3p0.checkoutTimeout=5000
  • 注意:
    • c3p0的配置文件内部可以包含命名配置文件和默认配置文件!默认是选择默认配置!如果需要切换命名配置可以在创建c3p0连接池的时候填入命名即可!
    • 如果xml配置文件和属性文件都存在时,xml优先级高于属性文件
  • 代码示例:
public class C3P0Util {
   private static ComboPooledDataSource cpds;

   static {
       try {
           //自动去获取配置信息,配置文件名字必须是c3p0.properties
           cpds = new ComboPooledDataSource();
           //硬编码,不建议使用,上面一条语句,加上配置文件即可
           //四个基本属性
//            dataSource.setDriverClass("com.mysql.jdbc.Driver");
//            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/myschool?useSSL=true&characterEncoding=utf8");
//            dataSource.setUser("root");
//            dataSource.setPassword("root");
//
//            //其他属性
//            //1初始大小
//            dataSource.setInitialPoolSize(20);
//            //2最大大小
//            dataSource.setMaxPoolSize(50);
//            //3最小池大小
//            dataSource.setMinPoolSize(10);
//            //4设置增长的大小
//            dataSource.setAcquireIncrement(5);
//            //5超时时间
//            dataSource.setCheckoutTimeout(5000);
       } catch (Exception e) {
           e.printStackTrace();
       }
   }

   public static Connection getConnection(){
       try {
           return cpds.getConnection();
       } catch (SQLException e) {
           e.printStackTrace();
       }
      return null;
   }
}

参考


转载请注明:Memory的博客 » 点击阅读原文

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦