`
lumingming1987
  • 浏览: 116271 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring isolation propagation

 
阅读更多

注意的几点:

1  @Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.

 

2 默认情况下,一个有事务方法, 遇到RuntiomeException 时会回滚 .  遇到 受检查的异常 是不会回滚 的. 要想所有异常都回滚,要加上 @Transactional( rollbackFor={Exception.class,其它异常}) .

 

 

 

@Transactional  的所有可选属性如下:

 

属性 类型 默认值 说明
propagation Propagation枚举 REQUIRED 事务传播属性 (下有说明)
isolation isolation枚举 DEFAULT 事务隔离级别 (另有说明)
readOnly boolean false 是否只读
timeout int -1 超时(秒)
rollbackFor Class[] {} 需要回滚的异常类
rollbackForClassName String[] {} 需要回滚的异常类名
noRollbackFor Class[] {} 不需要回滚的异常类
noRollbackForClassName String[] {} 不需要回滚的异常类名

 

 

 事务的隔离级别 有如下可选:

可以去看spring源码 : org.springframework.transaction.annotation.Isolation

(用时,导入org.springframework.transaction.annotation.Isolation,再在Transactional括号里用如isolation = Isolation.DEFAULT)

 

我的"隔离级别"相关文章   有不明白的,可以去看看.

 

 

DEFAULT 采用数据库默认隔离级别
READ_UNCOMMITTED 请看"隔离级别"相关文章
READ_COMMITTED 请看"隔离级别"相关文章
REPEATABLE_READ 请看"隔离级别"相关文章
SERIALIZABLE 请看 "隔离级别"相关文章

 

 

 

 

 

 

 

 

 

 

 

事务的传播属性 ,有如下可选

可以去看spring源码 : org.springframework.transaction.annotation.Propagation

(用时,导入org.springframework.transaction.annotation.Propagation,再在Transactional括号里用如propagation = Propagation.REQUIRED)

 

 

REQUIRED 业务方法需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么就加入该事务,否则自己创建一个新的事务.这是spring默认的传播行为.
SUPPORTS 如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分,如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行.
MANDATORY 只能在一个已存在事务中执行,业务方法不能发起自己的事务,如果业务方法在没有事务的环境下调用,就抛异常
REQUIRES_NEW 业务方法总是会为自己发起一个新的事务,如果方法已运行在一个事务中,则原有事务被挂起,新的事务被创建,直到方法结束,新事务才结束,原先的事务才会恢复执行.
NOT_SUPPORTED 声明方法需要事务,如果方法没有关联到一个事务,容器不会为它开启事务.如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行.
NEVER 声明方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常.只有没关联到事务,才正常执行.
NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中.如果没有活动的事务,则按REQUIRED属性执行.它使用了一个单独的事务, 这个事务拥有多个可以回滚的保证点.内部事务回滚不会对外部事务造成影响, 它只对DataSourceTransactionManager 事务管理器起效.

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
[java] view plaincopy
 
  1. //事务传播属性  
  2.     @Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事务,没有的话新建一个(不写的情况下)  
  3.     @Transactional(propagation=Propagation.NOT_SUPPORTED) //容器不为这个方法开启事务  
  4.     @Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务  
  5.     @Transactional(propagation=Propagation.MANDATORY) //必须在一个已有的事务中执行,否则抛出异常  
  6.     @Transactional(propagation=Propagation.NEVER) //必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)  
  7.     @Transactional(propagation=Propagation.SUPPORTS) //如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.  
  8.       
  9.    
  10.     @Transactional(propagation=Propagation.NESTED)   
  11.     @Transactional (propagation = Propagation.REQUIRED,readOnly=true//readOnly=true只读,不能更新,删除   
  12.     @Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间   
  13.     @Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置数据库隔离级别  
 
用 spring 事务管理器,由spring来负责数据库的打开,提交,回滚.
默认遇到运行期例外(throw new RuntimeException("注释");)会回滚,即遇到不受检查(unchecked)的例外时回滚;
而遇到需要捕获的例外(throw new Exception("注释");)不会回滚,即遇到受检查的例外(就是非运行时抛出的异常,编译器会检查到的异常叫受检查例外或说受检查异常)时,需我们指定方式来让事务回滚 ,如下:
@Transactional(rollbackFor=Exception.class) //指定回滚,遇到异常Exception时回滚
    public void methodName() {
       throw new Exception("注释");
        
    } 
@Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期例外(throw new RuntimeException("注释");)会回滚
    public ItimDaoImpl getItemDaoImpl() {
        throw new RuntimeException("注释");
    } 
分享到:
评论

相关推荐

    浅谈spring中isolation和propagation的用法

    浅谈Spring中isolation和propagation的用法 在Spring中,isolation和propagation是两个非常重要的概念,它们都是事务管理的核心组件。事务管理是指在数据库中执行一系列操作,以确保数据的一致性和完整性。在Spring...

    spring-tx-5.0.0.0.RELEASE.jar_java开发_spring-tx-5.0.0_

    当一个带有@Transactional的方法被调用时,Spring会自动创建并管理事务,根据配置的属性(如isolation、propagation、timeout、rollbackFor等)来决定事务的行为。 此外,Spring TX支持多种事务策略,如PROPAGATION...

    spring3.0两种事务管理配置

    Spring 3.0 事务管理配置 Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML ...

    spring 注解事务管理

    - `isolation`: 事务隔离级别,例如`Isolation.DEFAULT`(默认值)由数据库决定,还有`Isolation.READ_UNCOMMITTED`、`Isolation.READ_COMMITTED`、`Isolation.REPEATABLE_READ`和`Isolation.SERIALIZABLE`。...

    深入理解spring的事务管理机制

    1. **PROPAGATION_REQUIRED**:这是Spring默认的事务传播行为,表示支持当前事务,如果当前没有事务则新建一个。 2. **PROPAGATION_REQUIRES_NEW**:新建一个事务,如果当前存在事务,则将当前事务挂起,这意味着...

    全面分析_Spring_的编程式事务管理及声明式事务管理

    Spring 提供了五种隔离级别,分别是 `ISOLATION_DEFAULT`、`ISOLATION_READ_UNCOMMITTED`、`ISOLATION_READ_COMMITTED`、`ISOLATION_REPEATABLE_READ` 和 `ISOLATION_SERIALIZABLE`。不同的隔离级别对应不同的并发...

    Spring事务管理的jar包

    除了基本的事务控制,Spring还提供了丰富的事务属性,如传播行为(PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS等)、隔离级别(ISOLATION_DEFAULT、ISOLATION_READ_UNCOMMITTED等)和事务超时设置,允许开发者根据...

    Spring相关测试3

    Spring支持五种隔离级别:`ISOLATION_DEFAULT`、`ISOLATION_READ_UNCOMMITTED`、`ISOLATION_READ_COMMITTED`、`ISOLATION_REPEATABLE_READ`和`ISOLATION_SERIALIZABLE`。不同的隔离级别对应不同的并发控制策略,以...

    spring事务的传播特性和事务隔离级别

    #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,事务如何进行交互。Spring提供了七种事务...

    Spring_tx事务

    我们可以使用`@Transactional`注解的`propagation`属性来控制事务的传播行为,比如REQUIRED(默认)、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED。 **声明式事务管理**是Spring的强项,它...

    spring常用数据库事务传播属性和事务隔离级别1

    Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...

    spring事物的7大传播机制,5个隔离机制

    ### Spring事务的七大传播行为 在深入探讨Spring框架下的事务管理之前,我们首先明确事务的概念。事务是指一组操作作为一个整体,要么全部成功,要么全部失败。Spring提供了多种方式来管理和控制事务,其中一种重要...

    spring声明式事务处理demo

    3. **事务传播行为**:Spring提供了多种事务传播行为,例如PROPAGATION_REQUIRED(默认值,如果当前存在事务,则加入该事务;如果不存在,则创建一个新的事务)、PROPAGATION_SUPPORTS(如果当前存在事务,则加入该...

    spring 的3种事务配置方式

    在Spring中,事务的传播行为包括`PROPAGATION_REQUIRED`(默认,必须在一个事务中运行)、`PROPAGATION_SUPPORTS`(如果存在事务,则加入,否则非事务运行)、`PROPAGATION_MANDATORY`(必须在一个存在的事务中运行...

    spring注解事务实现demo

    注解中可以包含多个属性,如`value`(指定事务管理器)、`propagation`(事务传播行为)、`isolation`(事务隔离级别)、`readOnly`(是否只读事务)等,以定制事务的行为。 3. **事务传播行为** 事务传播行为定义...

    spring_tx的案例源码

    `@Transactional`注解有多个属性,如`propagation`(传播行为)、`isolation`(隔离级别)、`readOnly`(只读事务)、`timeout`(超时时间)和`rollbackFor`(指定异常类型触发回滚)。这些属性可以精细控制事务的...

    spring基于AspectJ实现事务控制

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class) public void someOtherServiceMethod() { // 业务逻辑 } ``` 4. **织入切面**:Spring会...

    后端 Java Spring Data Jpa @Transactional 介绍

    此外,可以通过Spring的`@Transactional`注解的属性(如`propagation`、`isolation`等)来定制事务的行为,以适应不同的业务场景。 总结来说,`@Transactional`是Spring提供的一种强大的工具,它简化了事务管理,...

Global site tag (gtag.js) - Google Analytics