工作中不一定是每執行一條sql語句就進行提交,有可能是一批業務的操作,這一批sql語句,要麼全部執行成功,要麼全部執行失敗。因此就需要用到事務來進行管理。
在spring中,提供了對事務的管理類。
首先需要在beans的配置檔案上新增tx的命名空間和位址
xmlns:tx=""/spring-tx-4.3.xsd
同時配置進行事務管理的資料來源
<bean
id="transactionmanager"
class
="org.springframework.jdbc.datasource.datasourcetransactionmanager"
>
<
property
name
="datasource"
ref="datasource"
/>
bean
>
<
tx:annotation-driven
transaction-manager
="transactionmanager"
/>
以上配置完成後,即可在程式的資料持久層進行事務管理。
在想要進行事務控制的類或public方法上使用註解@transactional
@override@transactional
public
void insert(listlist)
如上,如果乙個類中,類和方法都使用了該註解,以方法上的註解為優先。如果方法的修飾詞不是public,雖然不會報錯,但事務不會被管理。
@transactional中的屬性
propagation:可選的傳播性設定,引數為列舉
isolation:可選的隔離性設定,引數為列舉
readonly:可讀性,引數為boolean
timeout:超時時間,以s為單位,引數為int型別
rollbackfor:遇見指定的異常則回滾,引數是class型別,且必須為throwable子類,可以是乙個引數rollbackfor=exception.class或多個rollbackfor=。
rollbackforclassname:遇見指定的異常的名稱則回滾,引數是string,但必須是throwable子類的名稱。可以是乙個引數或多個。
norollbackfor:遇見指定的異常則必須不回滾,引數同rollbackfor。
norollbackforclassname:遇見指定的異常的名稱則必須不回滾,引數同rollbackforclassname。
由於以上方式需要對每個進行事務管理的地方都增加註解@transactional,因此可以使用aop配合,對多個類(方法)進行事務管理。
注意事項
1、@transactional預設丟擲異常為runableexception類及下面子類,如果所丟擲的類不屬於該範圍,例如丟擲exception型別的異常,則不會觸發事務回滾。
2、@transactional只對public型別有效,其他型別雖然不會報錯,但是均無效。
3、@transactional只對方法中丟擲的異常觸發回滾,如果異常在方法中已經**獲和處理,則不會觸發回滾。
spring 事務配置
自己寫的乙個關於事務的配置例子,很簡單 主要是spring的事務可以借助於aop直接環繞在target屬性所對應操作的周圍。無須為事務寫多餘的 即輕便又減少了耦合。配置檔案部分 bean.xml 由於是簡單的例子所以就不寫那麼規範了 class部分 package com.f9inux.test i...
spring事務配置
1 宣告式事務配置 配置sessionfactory 配置事務管理器 事務的傳播特性 那些類那些方法使用事務 具體配置如下 localsessionfactorybean classpath hibernate.cfg.xml 這個classpath是spring為我們提供的專門用來讀取classp...
配置spring 事務
三 在編寫買書方法 事務的傳播行為 乙個事務方法被另乙個事務方法呼叫,被呼叫的事務方法如何工作在事務中 使用propagation 指定事務的傳播行為,即當前的事務被另乙個事務方法呼叫時 transactional propagation propagation.required override ...