spring 對事務的支援

2021-08-03 12:02:09 字數 3176 閱讀 1146

id="txmanager"

class="org.springframework.jdbc.datasource.datasourcetransactionmanager">

name="datasource"

ref="c3p0datasource" />

bean>

bean id="c3p0datasource"

class="com.mchange.v2.c3p0.combopooleddatasource"

destroy-method="close">

name="driverclass"

value="com.mysql.jdbc.driver" />

name="jdbcurl"

value="jdbc:mysql://localhost:3306/wjh"/>

name="user"

value="root" />

name="password"

value="root" />

bean>

c3p0不能使用最新版本的,非註解的事務要使用老版本,新版本有bug,會報錯,我使用0.8.4.5的,使用0.9.1.1會報空指標異常

業務層**

@resource(name="txmanager")

private datasourcetransactionmanager tm;

public @responsebody string insert()

});}

如果不想有返回值可以這麼寫

transactiontemplate tran = 

new transactiontemplate(tm);

tran.execute(new transactioncallbackwithoutresult()

});

在非註解事務中,我們可以設定事務儲存點

transactiontemplate tran = 

new transactiontemplate(tm);

tran.execute(new transactioncallbackwithoutresult()

});

需要aopalliance-1.0.jar

在spring-mvc.xml檔案中

id="txmanager"

class="org.springframework.jdbc.datasource.datasourcetransactionmanager">

name="datasource"

ref="c3p0datasource" />

bean>

transaction-manager="txmanager" />

注意:transactionmanager是事務預設id,transaction-manager=」transactionmanager」這個屬性省略不寫

id=""

transactionmanager""

class="org.springframework.jdbc.datasource.datasourcetransactionmanager">

name="datasource"

ref="datasource" />

bean>

處理業務**

@transactional

public @responsebody string insert()

只要加了@transactional,會自動執行事務,一但在乙個中間某處業務出錯,不會被提交,資料庫便不會插入任何資訊,宣告式事務管理是利用spring aop實現的,註解的使用簡單,對**沒有侵入性,邏輯更清晰

@transactional標記有以下屬性,在使用時可以根據需要做特殊設定

@transactional 註解屬性預設設定如下:

在xml中實現宣告式事務

id="txadvice"

transaction-manager="txmanager" >

name="find*"

read-only="true"/>

name="add*"

propagation="required" />

name="update*"

propagation="required" />

name="delete*"

propagation="required" />

tx:attributes>

tx:advice>

proxy-target-class="true">

advice-ref="txadvice"

pointcut="within(spring.controller..*)" />

aop:config>

事務的回滾異常

異常分類

檢查異常(編譯異常)

執行時異常

執行時異常直接回退,檢查異常需要指定回退

對於checked exception,需要手動指定異常型別,才能實現事務回滾

使用註解宣告式事務,如下方式指定異常:

@transactional(rollbackfor=classnotfoundexception.class)

使用xml配置宣告式事務如下:

設定隔離級別為讀取提交的資料

Hibernate 對事務的支援

我們這裡只討論hibernate 對事務的支援,注意沒有涉及到spring 跟hibernate 整合這個問題將放到以後再討論。在hibernate 裡面也定義了乙個介面 transaction public void begin throws hibernateexception public i...

JDBC對事務的支援

事務要滿足四個條件 acid 原子性 乙個事務,要麼成功,要麼回滾 撤回 一致性 事務開始前的資料要和結束後的資料保持一致。隔離性 乙個事務正在進行,另外的事務要等待。永續性 事務提交後,資料的改變是永久性的。jdbc對dml語言的操作是預設提交的。當有多個dml操作時,我們應該取消自動提交 改為手...

spring對事務支援的三種形式

spring對事務支援的三種形式 1 通過spring配置檔案進行切面配置 class org.springframework.jdbc.datasource.datasourcetransactionmanager 2 通過開始事務程式設計來開啟乙個事務 transactiontemplate t...