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...