Hibernate中c3p0数据库连接池

什么是c3p0连接池?

官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

个人理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。

数据库连接池的运行机制

(1)  程序初始化时创建连接池

(2) 使用时向连接池申请可用连接

(3) 使用完毕,将连接返还给连接池

(4) 程序退出时,断开所有连接,并释放资源


作为开源的数据库连接池,C3P0是一个优秀的连接池,性能也十分可靠。

如何使用?

1、导包:

该jar包在hibernate框架源文件中路径: \hibernate-release-5.0.12.Final\lib\optional\c3p0
2、编写配置文件
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
        <property name="hibernate.connection.password">123456</property>
        <property name="hibernate.connection.url">jdbc:mysql:///spring</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        
        <!-- 执行操作时,控制台打印语句 -->
        <property name="hibernate.show_sql">true</property>
        
        <!-- 格式化SQL -->
        <property name="hibernate.format_sql">true</property>
        
        <!-- 数据库表生成策略 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        
        <!-- 配置c3p0数据源连接池 -->
        <property name="hibernate.c3p0.max_size">10</property>
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.idle_test_period">2000</property>
        <property name="hibernate.c3p0.timeout">2000</property>
        <property name="hibernate.c3p0.max_statements">10</property>
        
        
        <mapping resource="cn/bagebeyond/hibernate/entity/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

C3P0 数据库连接池属性

hibernate.c3p0.max_size: 数据库连接池的最大连接数

hibernate.c3p0.min_size: 数据库连接池的最小连接数

hibernate.c3p0.timeout:   数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁

hibernate.c3p0.max_statements:  缓存 Statement 对象的数量

hibernate.c3p0.idle_test_period:  表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时. 连接池本身不会把自己从连接池中移除,而是专门有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使用时间和当前时间的时间差来和 timeout 做对比,进而决定是否销毁这个连接对象。

hibernate.c3p0.acquire_increment: 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接

配置完城后,测试下就大功告成。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值