春天中的事务管理如何使用注解实现配置?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
使用步骤:
<强>步骤一,在春天配置文件中引入& 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) 公共List<强>事物传播行为介绍:强>
@ 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)
春天中的事务管理如何使用注解实现配置