<bean
id="transactionmanager"
class
="org.springframework.jdbc.datasource.datasourcetransactionmanager"
>
<
property
name
="datasource"
ref="datasource"
/>
bean
>
建立事務bean,配置資料來源屬性
<tx:annotation-driven
transaction-manager
="transactionmanager"
/>
事務註解驅動
@transactionalpublic
void
hastraninsertdata()
publicvoid
nothastraninsertdata()
以上可以看出上面的資料回滾了,而下面的儲存到資料庫了。
required
如果現有的事務正在進行,當前方法應該在這個事務中執行,否則它該啟動新事務,並在自己的十五中執行。
requires_new
當前方法必須啟動新事務,並在自己的事務中執行,如果現有的事務正在進行,它應該掛起。
supports
如果現有事務正在進行,當前方法應該執行在該事務中,否則它沒有必要執行在事務中。
not_supported
當前方法不應該執行在事務中,如果現有事務正在執行,它應該掛起。
mandatory
當前方法必須執行於事務中,如果沒有事務在進行中,將丟擲乙個異常。
never
當前方法不應該執行於事務中,如果現有事務在執行中,將丟擲乙個異常。
nested
如果現有事務正在進行,當前方法應該執行在巢狀的事務中,否則它應該啟動乙個新事務並執行在自己的事務之中。
例如:
@override@transactional
public
void
nestedbook()
catch
(exception e)
}}
@override@transactional(propagation=propagation.nested)
public
void nestedaccount(int
i) }
這裡乙個required事務去呼叫nested事務,nested特性是在巢狀的事務裡,如果發生異常他只會回滾他自己的事務,而不會影響呼叫他的事務。
他與requires_new的區別是,前面方法沒有事務是每次需要建立自己的事務,如果前面有事務時,前面方法如果報錯了會回滾所有操作,而requires_new不會回滾操作。
nested的好處在於既能保證前者方法拋異常時所有資料能回滾,也能保證後者方法乙個拋異常不會影響後續的操作,只會回滾後者操作失敗的資料。
default
使用底層資料庫的預設隔離級別。對於大部分資料庫,預設隔離級別是read_commited,mysql是repeatable_read
read_uncommited
允許事務讀取其他事務的未提交修改。可能發生髒讀資料、不可重複讀和幻讀問題。
read_commited
僅允許事務讀取其他事務已經提交的修改。能夠避免髒讀資料問題,但是不可重複讀和幻讀問題仍然可能發生。
repeatable_read
確保事務能夠多次從乙個欄位讀到相同值。在本事務期間,其他事務的更新被禁止。能夠避免髒讀資料和不可重複讀問題,但是幻讀問題仍然可能發生。
serializable
確保乙個事務能從表中多次讀取相同的行。在事務期間,其他事務做出的對該錶插入、更新和刪除將被禁止。能避免所有併發性問題,但是效能將會很低。
預設情況下,只有非受控異常(也就是runtimeexception和error型別)將導致事務回滾,而受控異常不會。
@override@transactional
public
void hastraninsertdata() throws
filenotfoundexception, classnotfoundexception
catch
(exception e)
}
嚴重警告:上面的這段**是不會回滾的,就因為丟擲的異常時受控異常
rollbackfor:會發生回滾的異常
norollbackfor:不會發生回滾的異常
將@transaction變為下面這樣
@transactional(rollbackfor=filenotfoundexception.class, norollbackfor=classnotfoundexception.class)
改變之後就會進行回滾
如果丟擲的異常改為
thrownew classnotfoundexception("錯誤");
則又不會回滾
timeout:表示事務在被強制回滾之前存活的時間。這能夠避免長時間的事務占用資源。
Spring中事務管理
spring提供的事務管理可以分為兩類 程式設計式的和宣告式的。程式設計式的,比較靈活,但是 量大,存在重複的 比較多 宣告式的比程式設計式的更靈活。傳統使用jdbc的事務管理 以往使用jdbc進行資料操作,使用datasource,從資料來源中得到connection,我們知道資料來源是執行緒安全...
Spring中事務管理
一 事務 1.事務邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗 2.事務特性 1 原子性 強調事務的不可分割 2 一致性 事務的執行的前後資料的完整性保持一致 3 隔離性 乙個事務執行過程中,不應該收到其他事務的干擾 4 永續性 事務一旦結束,資料就持久到資料庫中 3.事...
spring中的事務管理
一 簡單介紹 spring中的事務管理主要是用來管理對資料庫進行操作的事務,一般是應用於service層。分為幾種 1.程式設計式事務管理 如jdbc中設定取消資料庫的自動提交功能 conn datasource.getconnection conn.setautocommit false 此處表示...