Spring 提供兩種事務(wù)處理方式,一種是編程式事務(wù)處理;一種是聲明式事務(wù)處理。如果需要大量的事務(wù)處理,就用聲明式事務(wù)處理,如果很少的事務(wù)處理,就用編程式。
編程式事務(wù):
使用TransactionTemplate進(jìn)行事務(wù)處理(Spring進(jìn)行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 {
// 參數(shù)TransactionCallback 是一個(gè)接口,接口中定義了doInTransaction方法
// 只要實(shí)現(xiàn)TransactionCallback接口,在doInTransaction()方法里編寫(xiě)具體要進(jìn)行事務(wù)處理的代碼即可。
result = action.doInTransaction(status);
}
catch (RuntimeException ex) {
// 回滾事務(wù)
rollbackOnException(status, ex);
throw ex;
}
catch (Error err) {
// 回滾事務(wù)
rollbackOnException(status, err);
throw err;
}
this.transactionManager.commit(status);
return result;
}
}

}
實(shí)現(xiàn)TransactionCallback接口。
transactionTemplate.execute(
new TransactionCallback() {
public Object doInTransaction(TransactionStatus ts) {
//代碼實(shí)現(xiàn).
}
}
}
配置文件定義:
<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 閱讀(1092)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
Spring