一、事务传播行为种类
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,
它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
事务传播行为类型
事务传播行为类型
|
说明
|
PROPAGATION_REQUIRED
|
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
|
PROPAGATION_SUPPORTS
|
支持当前事务,如果当前没有事务,就以非事务方式执行。
|
PROPAGATION_MANDATORY
|
使用当前的事务,如果当前没有事务,就抛出异常。
|
PROPAGATION_REQUIRES_NEW
|
新建事务,如果当前存在事务,把当前事务挂起。
|
PROPAGATION_NOT_SUPPORTED
|
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
|
PROPAGATION_NEVER
|
以非事务方式执行,如果当前存在事务,则抛出异常。
|
PROPAGATION_NESTED
|
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类 似的操作。
|
http://xuezhongfeicn.blog.163.com/blog/static/224601412010314239632/
二、Readonly的解释:
“只读事务”并不是一个强制选项,它只是一个“暗示”,提示数据库驱动程序和数据库系统,这个事务并不包含更改数据的操作,那么JDBC驱动程序和数据库就有可能根据这种情况对该事务进行一些特定的优化,比方说不安排相应的数据库锁,以减轻事务对数据库的压力,毕竟事务也是要消耗数据库的资源的。
但是你非要在“只读事务”里面修改数据,也并非不可以,只不过对于数据一致性的保护不像“读写事务”那样保险而已。
因此,“只读事务”仅仅是一个性能优化的推荐配置而已,并非强制你要这样做不可
分享到:
相关推荐
Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两个核心:...
在事务拦截器中,我们可以配置不同的事务属性,例如PROPAGATION_REQUIRED、readOnly等,这些属性将被用来控制事务的行为。例如,在delete、add、update、save操作中,我们使用PROPAGATION_REQUIRED来确保事务的原子...
例如,对于只读操作,你可以设置`PROPAGATION_REQUIRED,readOnly`,这样所有以特定前缀(如`find*`、`get*`等)的方法都会在一个只读事务中执行。这种方式减少了重复配置,提高了效率。 3. **事务传播行为** - `...
除了声明式事务管理,Spring 还提供了编程式事务管理,即在代码中显式地开始、提交、回滚事务。这种方式更灵活,但维护起来更复杂,通常只在声明式事务管理无法满足需求时使用。 每种事务配置方式都有其适用场景和...
在 Spring 中,事务传播行为是通过 `PROPAGATION_` 前缀的常量来定义的,不同的传播行为会影响事务的执行方式。以下是常见的几种传播行为: - **PROPAGATION_REQUIRED**:如果当前存在事务,则加入该事务;如果当前...
通过本文的介绍,我们可以看到Spring框架中事务传播行为的多样性及其在实际应用中的重要性。了解并正确使用这些事务传播行为,可以帮助我们更好地设计和实现复杂的应用程序,确保数据的一致性和事务的完整性。在实际...
- `PROPAGATION_NESTED`:如果当前存在事务,则在一个嵌套事务中运行,否则行为类似`PROPAGATION_REQUIRED`。 6. **事务的隔离级别**: 除了传播行为外,事务还涉及隔离级别,如`ISOLATION_DEFAULT`、`ISOLATION_...
-- 配置拦截器,定义事务规则 --> *">PROPAGATION_REQUIRED,readOnly *">PROPAGATION_REQUIRED,-Exception *">PROPAGATION_REQUIRED,-Exception *">PROPAGATION_REQUIRED,-Exception <!-- 配置目标对象...
*">PROPAGATION_REQUIRED,readOnly *">PROPAGATION_REQUIRED *">PROPAGATION_REQUIRED *">PROPAGATION_REQUIRED,ROLLBACK_ON_EXCEPTION ``` 在这里,`transactionAttributes`属性定义了不同方法名前缀下...
在深入探讨Spring事务代理配置之前,我们先简要回顾一下Spring...通过以上步骤,我们就可以在Spring中成功配置事务代理,使得应用程序中的业务方法能够自动进行事务管理,极大地提高了代码的可维护性和事务的一致性。
事务传播特性&事务隔离级别 事务传播特性是指在 Java 中,事务的传播行为,即在多个...事务传播特性和事务隔离级别是 Java 中事务管理的两个重要方面,需要深入了解和正确使用,以确保事务的正确执行和数据的一致性。
【Spring中的事务管理】 在Spring框架中,事务管理是一个至关重要的部分,确保了数据库操作的完整性和一致性。Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。本篇文章主要探讨的是声明式事务管理...
在Spring中,我们可以配置事务的传播行为,比如REQUIRED(默认,如果当前存在事务,则加入当前事务,否则新建一个事务)、PROPAGATION_SUPPORTS(如果当前存在事务,则加入,否则不开启事务)、PROPAGATION_REQUIRES...
1. **传播行为(propagation)**:在Spring中,事务的传播行为定义了方法如何在事务环境中运行。例如,`PROPAGATION_REQUIRED`表示如果当前存在事务,则加入该事务;若无事务,则新建一个。其他还有`PROPAGATION_...
在Spring框架中,声明式事务管理是通过元数据(如XML配置或注解)来定义事务边界,使得开发者无需在业务代码中显式调用事务管理API,即可实现事务的控制。TransactionProxyFactoryBean是Spring提供的一种工具,用于...
- `*">PROPAGATION_REQUIRED,readOnly</prop>`: 表示所有以"add"开头的方法,使用`PROPAGATION_REQUIRED`传播策略(默认的,如果已有事务则加入,无事务则新建),并且标记为只读事务。 - `*">PROPAGATION_...
*">PROPAGATION_REQUIRED,readOnly ``` - **通用事务配置** 为了进一步简化代码并提高可重用性,可以创建一个抽象的事务配置Bean,用于统一管理所有服务层Bean的事务属性。这种方式尤其适用于多个服务...
*">PROPAGATION_REQUIRED,readOnly *">PROPAGATION_REQUIRED,-*Exception <!-- 更多事务属性配置 --> <!-- 需要事务管理的目标对象 --> ``` 这里的 `transactionAttributes` 属性定义了事务传播行为和...
`userDAOProxy`的`transactionAttributes`属性配置了`insert*`和`get*`方法的事务传播行为,分别为PROPAGATION_REQUIRED和PROPAGATION_REQUIRED,readOnly,这意味着所有以`insert`开头的方法都将在新的事务中执行,...