事务本来就是数据库中的概念,在DAO层。但一般情况下,需要将事务提升到业务层,即Service层。这样做是为了能够使用事务的特性来管理具体的业务。
在Spring中通常可以通过以下三种方式来实现对事务的管理。
(1)使用Spring的事务代理工厂管理事务
(2)使用Spring的事务注解管理事务
(3)使用AspectJ的AOP配置管理事务
Spring的事务管理,主要用到两个事务相关的接口。
(1)平台事务管理器接口:PlatformTransactionManager。其主要用于完成事务的提交、回滚,及获取事务的状态信息。
A:常用的两个实现类
PlatformTransactionManager接口有两个常用的实现类:
HibernateTransactionManager:使用Hibernate进行持久化数据时使用。
(2)事务定义接口
事务定义接口TransactionDefinition中定义了事务描述相关的三类常量:事务隔离级别、事务传播行为、事务默认超时时限,及对它们的操作。
A:定义了五个事务隔离界别常量
这些常量均是以ISOLATION开头。即形如ISOLATION_XXX。
DEFAULT:采用DB默认的事务隔离级别。MySQL的默认为REPEATABLE_READ;Oracle默认为READ_COMMITTED。
READ_UNCOMMITTED:读未提交。未解决任何并发问题。
READ_COMMITTED:读已提交。解决脏读,存在不可重复读与幻读。
REPEATABLE_READ:可重复度。解决脏读、不可重复读,存在幻读。
SERIALIZABLE:串行化,不存在并发问题。
B:定义了七个事务传播行为常量
所谓事务传播行为,处于不同事务中的方法在相互调用时,执行期间事务的维护情况。如:A事务中的方法doSome()调用B事务中的方法doOther()。在调用执行期间事务的维护情况,就称为事务传播行为。事务传播行为是加在方法上的。
事务传播行为常量都是以PROPAGATION_开头
原文:https://www.cnblogs.com/zhy0720/p/10459112.html