數據庫事務處理、連接池介紹

一、事務:

事務:單個邏輯工元執行的一系列邏輯工作單元執行的一系列操

1)事務特徵:

  •   原子性  指事務包含的所有操作要麼全部成功,要麼全部失敗回滾
  •   一致性  指事務執行的前後,數據的完整性保持一致
  •   隔離性  指一個事務執行的過程中,不應該受到其他事務的干擾
  •   持久性   一個事務執行完成後,數據就持久的保存在數據庫中

2)事務處理,不考慮隔離性引發的安全問題

  1. 髒讀                       一個事務讀取到另一個事務未提交的數據
  2. 不可重複讀            一個事務讀到另一事務已經提交的update數據,導致在前一個事務多次查詢的結果不一致
  3. 虛度                       一個事務讀到另一個事務已經提交的insert數據,導致在前一個事務多次查詢結果不一致

3)事務的隔離性,設置它可避免上述情況

  •  Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生。
  •  Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
  •  Read committed (讀已提交):可避免髒讀的發生。
  •  Read uncommitted (讀未提交):最低級別,任何情況都無法保證。

4)hibernate設置事務個隔離級別,進行事務處理

<!--當前線程綁定session-->
<property name="hibernate.current_session_context_class">thread</property>
<!--設置事務的隔離級別-->
<property name="hibernate.connection.isolation">4</property>

設置事務隔離級別.取值爲 1、2、4、8

                   1 : READ_UNCOMMITED 讀取未提交,它引發所有的隔離問題

                   2 : READ_COMMITTED 讀取已提交,阻止髒讀,可能發生不可重複讀與虛讀

                   4 : REPEATABLE_READ 重複讀,阻止髒讀,不可重複讀,可能發生虛讀

                   8 : SERIALIZABLE 串行化,解決所有問題,不允許兩個事務,同時操作一個目標數據。(效率低)

       ORACLE 默認的事務隔離級別是READ_COMMITTED

       MYSQL 默認的事務隔離級別是REPEATABLE_READ

<property name="hibernate.connection.isolation">4</property>

二、連接池介紹

https://blog.csdn.net/crankz/article/details/82874158

C3P0:是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate 一起發佈,包括了實現jdbc3和jdbc2擴展規範說明的Connection 和Statement 池的DataSources 對象。

        <!-- 自己 配置C3P0連接池 -->
		<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!--在連接池中可用的數據庫連接的最少數目 -->
		<property name="c3p0.min_size">5</property>
		<!--在連接池中所有數據庫連接的最大數目  -->
		<property name="c3p0.max_size">20</property>
		<!--設定數據庫連接的過期時間,以秒爲單位,
		如果連接池中的某個數據庫連接處於空閒狀態的時間超過了timeout時間,就會從連接池中清除 -->
		<property name="c3p0.timeout">120</property>
		 <!--每3000秒檢查所有連接池中的空閒連接 以秒爲單位-->
		<property name="c3p0.idle_test_period">3000</property>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章