spring事務的理解與測試

2021-07-15 03:36:21 字數 2926 閱讀 1771

一、對事務的說明和配置

經常使用到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來運算元據庫,必須通過以下步驟才能使用到資料庫的事務,步驟如下...