Hibernate自帶了鏈接池,可是呢,該鏈接池比較簡單..而Hibernate又對C3P0這個鏈接池支持…所以咱們來更換Hibernate鏈接池爲C3P0數據庫
咱們能夠經過Hibernate.properties文件中查看Hibernate默認配置的鏈接池markdown
hibernate.properties的配置文件能夠在\project\etc
找到session
Hibernate的自帶鏈接池啥都沒有,就一個鏈接數量爲1…ide
咱們在hibernate.cfg.xml中配置C3p0,讓C30P0做爲Hibernate的數據庫鏈接池測試
查找Hibernate支持的鏈接池組件有什麼:ui
既然找到了,那麼咱們在hibernate.cfg.xml中配置對應的類就和相關配置就好了spa
<!-- 【鏈接池配置】 --> <!-- 配置鏈接驅動管理類 --> <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的時候,有兩個方法hibernate
通常地,咱們使用線程Session比較多線程
若是要使用getCurrentSession(),須要在配置文件中配置:code
<!--配置線程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已經關閉了! }