Spring的事务管理

来源:互联网 发布:男士护肤 知乎 编辑:程序博客网 时间:2024/06/05 20:48

在Spring的事务管理中,我们可以使用@Transactional这一annotation来对事务进行声明式的设定。具体而言,就是在类或者方法前添加@Transactional并传入属性参数以获取所需要的Transaction特性。Spring中的@Transactional有5个属性:Propagation、Isolation、Rollback Rules、Timeout和Read-Only,其中Propagation属性定义了Transaction的边界 — 是否使用Transaction、在Transaction已存在的情况下如何表现等。

在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。 


Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked 

如果遇到checked意外就不回滚。 

如何改变默认规则: 

1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class) 

2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class) 

3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED) 

在整个方法运行前就不会开启事务 

       还可以加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样就做成一个只读事务,可以提高效率。


使用Annotation元数据驱动的声明式事务管理,基本上就需要做两件事:

  1. 使用@Transactional标注相应的业务对象以及相关业务方法.  这一步通常由业务对象的开发者统一负责了,@Transactional的使用使得元数据以及业务逻辑的实现全部集中到了一处,有了IDE的支持, 管理起来更是得心应手。

  2. 在容器的配置文件中设定事务基础设施.  我们需要添加<tx:annotation-driven transaction-manager="transactionManager"/>以便有人使用我们所标注的@Transactional, 并且,需要给出相应的事务管理器,要进行事务管理,没有他可不行。

 

原创粉丝点击