Spring编程式事务管理

两种Spring事务管理方式:编程式、声明式。 
Spring提供了两种声明式事务管理,分别是AOP切面和注解@Transactional
Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager。

两者不同点
1、声明式事务最大的优点就是不需通过编程的方式而进行管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明,便可将事务规则应用到业务逻辑中。
2、声明式事务不足的地方在于,与编程式事务相比,只能作用到方法级别,无法像编程式事务那样可以作用到代码块级别。

编程式事务TransactionTemplate讲解
使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过TransactionStatus 的setRollbackOnly 显式回滚事务。 
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。Callback 也是Spring 的经典设计,用于简化用户操作, TransactionCallback 包含如下方法。 
• Object dolnTransaction(TransactionStatus status) 。 
该方法的方法体就是事务的执行体。 
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResultl类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback 接口的子接口,该抽象类包含一个抽象方法: 
• void dolnTransactionWithoutResult(TransactionStatus status)该方法与dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。 


example: 

transactionTemplate.execute(new TransactionCallback() { 
public Object doInTransaction(TransactionStatus status) { 
try{ 
    } 
catch (Exception e) { 
   status.setRollbackOnly(); 

}); 

当业务复杂时,比如请求外部地址都需要用编程式事务来做业务

你可能感兴趣的:(java)