一、對事務的說明和配置
經常使用到spring事務的會知道,一般處理到spring的事務,有三種處理方式:
1、程式設計式事務
較繁瑣,適用於處理複雜的業務場景
業務層使用事務模板物件transactiontemplate完成將多個操作製成同一事務,使用execute方法完成。
//事務模板宣告
private transactiontemplate transactiontemplate;
public
void
settransactiontemplate(transactiontemplate transactiontemplate)
//該方法內使用到事務
public
void
transfer(final string out,final string in,final double money)
};//事務管理操作
transactiontemplate.execute(tc);
}
事務的配置:事務管理模板註冊到業務bean中,事務管理物件註冊到模板物件中。
id="accountservice"
class="cn.itast.tx.account.accountserviceimpl">
name="accountdao"
ref="accountdao"/>
name="transactiontemplate"
ref="transactiontemplate"/>
bean>
id="transactiontemplate"
class="org.springframework.transaction.support.transactiontemplate">
name="transactionmanager"
ref="transactionmanager"/>
bean>
id="transactionmanager"
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
name="datasource"
ref="datasource"/>
bean>
2、宣告式事務
程式設計式事務其實就是spring能夠統一管理事務的原理。
將程式設計式事務中的通用**抽取出來,製作成around通知,使用aop原理,將事務管理的**動態織入到原始方法中。由於該功能使用量較大,sprng已經將該通知製作完畢。
id="txadvice"
transaction-manager="txmanager">
name="transfer"/>
tx:attributes>
tx:advice>
注意:txadvice需要為其指定乙個事務管理器的bean
id="txmanager"
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
name="datasource"
ref="datasource">
property>
bean>
設定aop:
advice-ref="txadvice"
pointcut="execution(void *..*.*.trans*(..))"/>
aop:config>
這種要比程式設計式事務簡單許多,但底層還是由程式設計式事務實現,對業務層的事務配置靈活了許多。
3、事務註解
其實它也是宣告式事務的一種,也是最簡單的實現事務的方式。
transaction-manager="txmanager"/>
id=" txmanager "
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
name="datasource"
ref="datasource">
property>
bean>
之後只需要在實現事務的介面或方法上新增註解 @transactional.
二、對事務的測試
/**
* 不加事務時,如果捕獲了異常(但不報程式錯誤)則捕捉異常,try內的異常之後不再執行;try外的繼續執行
* 加了事務之後
* 1、錯誤出現在try中,異常**獲,程式繼續執行不會報錯;try外的繼續執行不會回退;try內的異常前的回退,異常後的不執行(如**所示,當20注釋掉導致異常,執行後,23、19、21會被正常執行,22不執行)
* -- 此時相當於事務不起作用
* 2、try外任一處出現異常,try內、外全部回退,程式報錯**/
@transactional()
public
void
testadd2()catch(exception e)
productexchangeinfo = new productexchangeinfodto();
productexchangeinfo.setid((long)21);
productexchangeinfo.setproductname("31119");
productexchangeinfodao.insertoneproduct(productexchangeinfo);
}
spring 事務的理解
1 spring事務的本質其實就是資料庫對事務的支援 2 spring事務的傳播屬性 propagation required 支援當前事務 如果當前沒有事務,就新建乙個事務。propagation requires new新建事務,如果當前存在事務,把當前事務掛起。propagation supp...
spring事務理解
由於以前都是對整個selevlet或者jsp進行事務,所以昨天自然的也以為可在controller類中進行事務 在handlerequest方法中使用了 code jzlogic.updatea a jzlogic.inserb b code jzlogic已經設定事務規則,對insert upda...
Spring 事務理解
1 spring事物是什麼?事務通常由高階資料庫操縱語言或程式語言編寫的,說白了事務就是執行一段或者多段sql的方法。spring本身是沒有事務一說的,資料庫對事務的支援才是spring事務的本質。2 為什麼需要spring事物?jdbc來運算元據庫,必須通過以下步驟才能使用到資料庫的事務,步驟如下...