Spring 提供兩種事務處理方式,一種是編程式事務處理;一種是聲明式事務處理。如果需要大量的事務處理,就用聲明式事務處理,如果很少的事務處理,就用編程式。
編程式事務:
使用TransactionTemplate進行事務處理(Spring進行commit和rollback),原型定義如下:
public class TransactionTemplate extends DefaultTransactionDefinition implements InitializingBean {

public Object execute(TransactionCallback action) throws TransactionException {
if (this.transactionManager instanceof CallbackPreferringPlatformTransactionManager) {
return ((CallbackPreferringPlatformTransactionManager) this.transactionManager).execute(this, action);
}
else {
TransactionStatus status = this.transactionManager.getTransaction(this);
Object result = null;
try {
// 參數TransactionCallback 是一個接口,接口中定義了doInTransaction方法
// 只要實現TransactionCallback接口,在doInTransaction()方法里編寫具體要進行事務處理的代碼即可。
result = action.doInTransaction(status);
}
catch (RuntimeException ex) {
// 回滾事務
rollbackOnException(status, ex);
throw ex;
}
catch (Error err) {
// 回滾事務
rollbackOnException(status, err);
throw err;
}
this.transactionManager.commit(status);
return result;
}
}

}
實現TransactionCallback接口。
transactionTemplate.execute(
new TransactionCallback() {
public Object doInTransaction(TransactionStatus ts) {
//代碼實現.
}
}
}
配置文件定義:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="myDataSource" />
</property>
</bean>
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
</bean>
posted on 2008-07-28 14:37
josson 閱讀(1091)
評論(0) 編輯 收藏 所屬分類:
Spring