
Spring AOP实现事务管理
事务管理对于企业应用程序至关重要. 即使在异常情况下,它也可以确保数据一致性. Sping中的事务管理实际上是事务的管理(提交,回滚).
声明式配置事务是Spring框架中最常用的,并且声明式配置可以基于XML或注释进行配置.
I. 基于注释的配置. 顾名思义,由于基于注释的配置是必需的,因此注释是必不可少的. 它们是在Spring框架中提供的.
@Transactional批注,此批注主要在需要打开事务的服务接口的实现类中配置,其中@Transactional值具有以下属性:
以上属性主要用于隔离和传播. 这两个属性的值是枚举.

隔离(事务隔离级别)此属性用于隔离表事务. 对于某些并发访问或更新同一,必须设置此属性,否则会发生脏读和更新丢失等问题. 隔离属性是解决此问题的非常有效的方法. 隔离属性提供了不同隔离级别的枚举值:
隔离级别角色
Isolation.READ_UNCOMMITTED读取未提交的数据(脏读spring aop配置事务,不可重复读)
Isolation.READ_COMMITTED读取已提交的数据(将发生不可重复的幻像读取)
Isolation.REPEATABLE_READ可重复读取(将发生幻像读取)
Isolation.SERIALIZABLE序列化

传播(事务传播行为)此属性是如何创建事务,如何加入事务的方法:
传播行为
传播. 如果有交易,则加入该交易,如果没有,则创建一个新交易(不写)
Propagation.NOT_SUPPORTED容器没有为此方法打开事务
Propagation.REQUIRES_NEW创建新事务,而不管是否存在事务,原始事务已暂停,新执行完成且旧事务继续.
Propagation.MANDATORY必须在现有事务中执行,否则会引发异常

Propagation.Never必须在非事务中执行,否则会引发异常(与Propagation.MANDATORY相反)
Propagation.SUPPORTS如果其他bean调用此方法并在其他bean中声明事务,则使用事务. 如果其他bean不声明交易,则不要使用交易
那么您如何在Spring中使用此事务注释?
在弹簧容器中配置以下配置信息:
{3: 3: 4: a: c: 4: 3: c: a: b: 6: 0: f: 1: b: 2: e: f: b: e: 9: d: 8: f: 9: c: f: 2: 1: 1: 1: 1: d)
在服务的接口实现类中添加@Teansactional批注. 请注意,实现类或方法的访问权限是公共的.

在@Transactional批注中设置隔离(事务隔离级别)和传播(事务传播行为)这两个属性. 根据业务需求设置这两个属性. rollbackFor的功能是: 当程序报告Exception时,事务将执行回滚操作以确保数据的准确性.
如果某个方法不需要打开交易,请对该方法提交评论,然后将该属性设置为Propagation.NOT_SUPPORTED
注意:
注释必须放在弹簧(启动容器)中spring aop配置事务,否则事务将无法启动(因为扫描程序将扫描所有bean(事务注释@Transactional))
II. 基于XML的配置:
<tx:advice id="txAdvice" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="update*" rollback-for="CustomException" isolation="DEFAULT" propagation="REQUIRED" />
<tx:method name="save*" rollback-for="CustomException" isolation="DEFAULT" propagation="REQUIRED" />
<tx:method name="insert*" rollback-for="CustomException" isolation="DEFAULT" propagation="REQUIRED" />
<tx:method name="add*" rollback-for="CustomException" isolation="DEFAULT" propagation="REQUIRED" />
<tx:method name="delete*" rollback-for="CustomException" isolation="DEFAULT" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- 编写aop,让spring自动对目标生成代理 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.koi.service.impl.*.*(..))"
id="myPointcut" />
<!-- 配置通知器:将切入点与通知整合 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut" />
</aop:config>
OF: 锦鲤(⑉°з°)-
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-152333-1.html
本职是作家
你厉害你来
而且进12海里了