春天中的事务管理如何使用注解实现配置

  

春天中的事务管理如何使用注解实现配置?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

使用步骤:

<强>步骤一,在春天配置文件中引入& lt; tx:祝辞命名空间

& lt;豆类xmlns=癶ttp://www.springframework.org/schema/beans"   xmlns: xsi=癶ttp://www.w3.org/2001/XMLSchema-instance"   xmlns: tx=癶ttp://www.springframework.org/schema/tx"   xsi: schemaLocation=? http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   http://www.springframework.org/schema/tx   以前,http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"的在

<强>步骤二,具有@ transactional注解的bean自动配置为声明式事务支持

& lt; !——事务管理器配置,Hibernate单数据源事务——比;   & lt; bean id=癲efaultTransactionManager"类=皁rg.springframework.orm.hibernate3.HibernateTransactionManager"比;   & lt;属性名=皊essionFactory"ref=皊essionFactory"/比;   & lt;/bean>      & lt; !——使用注释定义事务——比;   & lt; tx:注解驱动的事务管理器=癲efaultTransactionManager"proxy-target-class=皌rue"/在

<强>步骤三,在接口或类的声明处,写一个@ transactional。

要是只在接口上写,接口的实现类就会继承下来,接口的实现类的具体方法,可以覆盖类声明处的设置

@Transactional ,//类级的注解,适用于类中所有的公共的方法

<强>事务的传播行为和隔离级别

大家在使用春天的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅。

<强>事物注解方式:@ transactional

当标于类前时,标示类中所有方法都进行事物处理,例子:

@ transactional   公共类TestServiceBean实现TestService {}

当类中某些方法不需要事物时:

@ transactional   公共类TestServiceBean实现TestService {   私人TestDao刀;   公共空间setDao (TestDao dao) {   这一点。刀=刀;   }   @ transactional(传播=Propagation.NOT_SUPPORTED)   公共ListgetAll () {   返回null;   }   }

<强>事物传播行为介绍:

@ transactional(传播=Propagation.REQUIRED)

如果有事务,那么加入事务,没有的话新建一个(默认情况下)

@ transactional(传播=Propagation.NOT_SUPPORTED)

容器不为这个方法开启事务

@ transactional(传播=Propagation.REQUIRES_NEW)

不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务

@ transactional(传播=Propagation.MANDATORY)

必须在一个已有的事务中执行,否则抛出异常

@ transactional(传播=Propagation.NEVER)

必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)

@ transactional(传播=Propagation.SUPPORTS)

如果其他豆调用这个方法,在其他bean中声明事务,那就用事务。如果其他豆没有声明事务,那就不用事务。

<强>事物超时设置:

@ transactional(超时=30)//默认是30秒

事务隔离级别:

@ transactional(隔离=Isolation.READ_UNCOMMITTED)

读取未提交数据(会出现脏读,不可重复读)基本不使用

@ transactional(隔离=Isolation.READ_COMMITTED)

读取已提交数据(会出现不可重复读和幻读)

@ transactional(隔离=Isolation.REPEATABLE_READ)

可重复读(会出现幻读)

@ transactional(隔离=Isolation.SERIALIZABLE)

串行化

MYSQL:默认为REPEATABLE_READ级别

:状态"置疑"默认为READ_COMMITTED

脏读:一个事务读取到另一事务未提交的更新数据

不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同,换句话说,

后续读取可以读到另一事务已提交的更新数据。相反,“可重复读“在同一事务中多次

读取数据时,能够保证所读数据一样,也就是后续读取不能读到另一事务已提交的更新数据

幻读:一个事务读到另一个事务已提交的插入数据

@ transactional注解中常用参数说明

参数名称

功能描述

只读的

该属性用于设置当前事务是否为只读事务,设置为真实表示只读,错误则表示可读写,默认值为假,例如:@ transactional (readOnly=true)

春天中的事务管理如何使用注解实现配置

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5