Spring的4種事務管理(1種程式設計式事務+三種宣告事務)
Spring的4種事務管理(1種程式設計式事務+三種宣告事務)
· TransactionTemplate可以實現程式設計式事務
· Spring使用AOP來實現宣告式事務
一、Spring事務的介紹
二、程式設計式事務xml的配置
配置spring-dao.xml中
1. 在OrderServiceImpl中使用TransactionTemplate
2. TransactionTemplate依賴DataSourceTransactionManager
3. DataSourceTransactionManager依賴DataSource
<bean id="transactionTemplate"class="org.springframework.transaction.support.TransactionTemplate">
<propertyname="transactionManager"ref="transactionManager"></property>
</bean>
<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource" ref="dataSource"/>
在baseManager.java中
public class BaseManager {
private static final Loggerlog = Logger.getLogger(BaseManager.class);
// privatePlatformTransactionManager transactionManager;
private TransactionTemplatetransactionTemplate;
// public TransactionTemplategetTransactionManager() {
// return new TransactionTemplate(transactionManager);
// }
//
// public voidsetTransactionManager(PlatformTransactionManager transactionManager) {
// this.transactionManager= transactionManager;
// }
public TransactionTemplategetTransactionManager() {
returntransactionTemplate;
}
public voidsetTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate= transactionTemplate;
}
}
在orderManagerImpl中
public boolean updateOrderById(final Order order) throws Exception {
finalTransactionTemplate transactionTemplate = this.getTransactionManager();
Boolean result =(Boolean)transactionTemplate.execute(new TransactionCallback() {
@Override
public ObjectdoInTransaction(TransactionStatus status) {
try {
業務……
return true;
}catch (Exceptione){
log.error("修改失敗,id:"+order.getId());
status.setRollbackOnly();//回滾
return false;
}
}
});
return result;
}
三、基於AOP方式的宣告式事務管理
prop的具體配置
使用AOP宣告式事務是時service層必須注入代理類
四、基於AspectJ的宣告式事務
基於AspectJ的xml配置
傳播行為的配置
五、基於註解方式的宣告式事務管理
在配置spring-dao.xml中
<tx:annotation-driventransaction-manager="transactionManager"/>
<beanid="transactionTemplate"class="org.springframework.transaction.support.TransactionTemplate">
<propertyname="transactionManager"ref="transactionManager"></property>
</bean>
在需要使用事務的類上添加註解即可 @Transactional
@Transactional public boolean updateOrderById(final Order order) throws Exception { …… }
註解方式的傳播行為配置
學習總結:
Spring將事務管理分為了兩類:
一、程式設計式事務管理
需要手動編寫程式碼進行事務的管理(一般不用)
二、宣告式事務管理:
1、基於TransactionProxyFactoryBean的方式(很少使用)
需要為每個事務管理的類配置一個TransactionProxyFactoryBean進行管理。使用時還需要在類中注入該代理類。
2、基於AspectJ的方式(常使用)
配置好之後,按照方法的名字進行管理,無需再類中新增任何東西。
3、基於註解的方式(經常使用)
配置簡單,在業務層類上添加註解@Transactional。