Hibernate第十一篇【配置C3P0数据库连接池、线程Session】

本文介绍如何将Hibernate的默认连接池替换为C3P0,并详细配置C3P0的各项参数,包括最大连接数、最小连接数等。同时,还探讨了如何通过配置使Hibernate能够支持线程Session。

tags: Hibernate


Hibernate连接池

Hibernate自带了连接池,但是呢,该连接池比较简单..而Hibernate又对C3P0这个连接池支持...因此我们来更换Hibernate连接池为C3P0

查看Hibernate自带的连接池

我们可以通过Hibernate.properties文件中查看Hibernate默认配置的连接池

hibernate.properties的配置文件可以在\project\etc找到

Hibernate的自带连接池啥都没有,就一个连接数量为1...


查看Hibernate对C3P0的支持

  • #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连接池

我们在hibernate.cfg.xml中配置C3p0,让C30P0作为Hibernate的数据库连接池

查找Hibernate支持的连接池组件有什么

既然找到了,那么我们在hibernate.cfg.xml中配置对应的类就和相关配置就行了


		<!-- 【连接池配置】 -->
		<!-- 配置连接驱动管理类 -->
		<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!-- 配置连接池参数信息 -->
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.max_size">4</property>
		<property name="hibernate.c3p0.timeout">5000</property>
		<property name="hibernate.c3p0.max_statements">10</property>
		<property name="hibernate.c3p0.idle_test_period">30000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property>
复制代码

#线程Session#

我们创建Session的时候,有两个方法

  • openSession()【每次都会创建新的Session】
  • getCurrentSession()【获取当前线程的Session,如果没有则创建】

一般地,我们使用线程Session比较多

如果要使用getCurrentSession(),需要在配置文件中配置:

        <!--配置线程Session-->
        <property name="hibernate.current_session_context_class">thread</property>
复制代码

##测试数据##


@Test
	public void testSession() throws Exception {
		//openSession:  创建Session, 每次都会创建一个新的session
		Session session1 = sf.openSession();
		Session session2 = sf.openSession();
		System.out.println(session1 == session2);
		session1.close();
		session2.close();
		
		//getCurrentSession 创建或者获取session
		// 线程的方式创建session  
		// 一定要配置:<property name="hibernate.current_session_context_class">thread</property>
		Session session3 = sf.getCurrentSession();// 创建session,绑定到线程
		Session session4 = sf.getCurrentSession();// 从当前访问线程获取session
		System.out.println(session3 == session4);
		
		// 关闭 【以线程方式创建的session,可以不用关闭; 线程结束session自动关闭】
		//session3.close();
		//session4.close(); 报错,因为同一个session已经关闭了!
	}
复制代码

如果您觉得这篇文章帮助到了您,可以给作者一点鼓励

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值