java交易處理

來源:互聯網
上載者:User

標籤:順序   blank   poi   ring   必須   轉變   viso   作者   哪些   

說到事務,無非就是事務的提交commit和復原rollback。

事務是一個操作序列,這些操作要麼全部都執行成功,事務去提交,要麼就是有一個操作失敗,事務去復原。

要知道事務的4大特性ACID.即原子,一致,隔離,持久。

原子性(atomicity):一個事務是一個不可分割的工作單位,事務中的諸多操作,要麼都做,要麼都不做。

一致性(consistency):事務必須使資料庫從一個一致性狀態,轉變為另一個一致性狀態。一致性和原子性是密切相關的。

隔離性:(isolation)一個事務的執行不能被其他事務幹擾,即一個事務內部的操作及使用的資料對並發的其他事務是隔離的,並發執行的各個事務不能互相干擾。 

持久性(durability):持久性也稱永久性,指一個事務一旦提交,他對資料庫中的資料的改變就應該是永久性的。接下來的其他動作或故障不應該對齊有任何影響。

手動設定事務

try{
開啟事務
操作1--》db操作
操作2--》db操作
操作3--》db操作
提交事務
}catch{
復原事務
}

 

 

 

下面用ssm架構來管理事務

 

1首先配置交易管理員

 

 

關鍵類是DataSourceTransactionManager。

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"/>(表示管理哪個資料來源的事務)

</bean>

 

 

2聲明事務的特性、規則(註解方式不用配置事務特性)

 

 

<!--通過<tx:advice>標籤定義事務增強,並制定交易管理員 -->

<tx:advice id="txAdvice" transaction-manager="txManager">(聲明哪個交易管理員的事務特性)

<!--定義屬性,聲明事務規則 -->

<tx:attributes>

<tx:method name="create*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="Exception"/>

</tx:attributes>

</tx:advice>

 

 

分析下事務的propagation傳播方式

53041564/

分析下事務的isolation

隔離性
對相同的資料進行讀寫時,事務並發會發生錯誤資料處理,會產生髒讀、幻讀,不可重複讀取等錯誤,這些可以通過設定事務的隔離等級來解決
髒讀:一個事務讀取了另一個事務改寫但還未提交的資料,如果這些資料被復原,則讀到的資料時無效的
不可重複讀取:在同一事務中,多次讀取同一資料返回的結果不同,換句話說,後續讀取可以讀到另一事務已提交的更新資料,這樣就會出現兩次讀取資料不一樣(如事務t1讀取某一資料,事務t2讀取並修改了該資料,t1為了讀取值驚醒校正而在此讀取改資料,得到了不同的結果)
可重複讀:在同一事務中多次讀取資料時,能夠保證所讀資料一樣,也就是後續讀取不能讀到另一事務已經提交更新的資料
幻讀:一個事務讀取了幾行記錄後,另一事務插入一些記錄,幻讀就發生了,再後來的查詢中,第一個事務就會發現原來沒有的記錄

隔離等級(isolation):
1、讀未提交 READ_UNCOMMITTED 還未提交就能查看
2、讀已提交 READ_COMMITTED 這個層級會把查看,增刪改隔離開來,未提交的增刪改不能查看
3、可重複讀REPEATABLE_READ
4、序列化操作SERIALIZABLE 事務間對同一資料互斥,必須等第一個事物完成之後,第二個事務才可以操作
預設值 DEFAULT(oracle 預設值是第二個,mysql是第三個)
隔離等級由低到高的順序 READ_UNCOMMITTED -->READ_COMMITTED-->REPEATABLE_READ-->SERIALIZABLE層級越高安全性越高,並發處理能力越低

itachi
連結:https://www.jianshu.com/p/702ea7a02a10
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。

分析下事務的rollback-for

是交易回復方式一般異常時復原Exception

 

 

3配置事務

 

3.1使用註解來配置

 

<!-- 開啟事務註解,標註@Transactional的類和方法將具有事務性 -->

<tx:annotation-driven transaction-manager="txManager" />(使用哪個交易管理員來配置事務)

註解的用法,必須為public方法才行,不要捕捉異常,要讓異常自動拋出,否則不能進行交易回復。方法要寫在服務層中在controller中無效。

@Transactional(isolation=isolation.READ_COMMITED)
public void f3(){
處理1
處理2
}

 

3.2使用標籤來配置(註解方式不用配置事務特性)

 

<!-- 在切面中插入事務 -->

<aop:config proxy-target-class="true">

事務代理(代理歸屬權)
建立的sqlsesstion用什麼接收的問題?
proxy-target-class=false
jdk的代理(只能用impl,不能用介面)
proxy-target-class=true
spring的代理(可以用介面了)

<aop:pointcut id="serviceMethod" expression="execution(* com.lyt.soa.service..*.*(..))"/>(在哪些切點中加入事務)

<!-- 將事務增強與切入點組合(織入事務切面) -->

<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>(織入事務並規定了事務特性)

</aop:config>

 

 

 

 

 

java交易處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.