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。