`

SPRING注解事务管理

阅读更多

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

事务注解方式: @Transactional 

当标于类前时, 标示类中所有方法都进行事务处理 

例子: 

@Transactional 
public class TestServiceBean implements TestService {} 

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

@Transactional 
public class TestServiceBean implements TestService { 
    
    private TestDao dao; 
    
    public void setDao(TestDao dao) { 
        this.dao = dao; 
    } 
    
    @Transactional(propagation = Propagation.NOT_SUPPORTED) 
    public List<Object> getAll() { 
        return null; 
    } 
    


事务传播行为介绍: 
@Transactional(propagation=Propagation.REQUIRED) 
如果有事务, 那么加入事务, 没有的话新建一个(默认情况下) 
@Transactional(propagation=Propagation.NOT_SUPPORTED) 
容器不为这个方法开启事务 
@Transactional(propagation=Propagation.REQUIRES_NEW) 
不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务 
@Transactional(propagation=Propagation.MANDATORY) 
必须在一个已有的事务中执行,否则抛出异常 
@Transactional(propagation=Propagation.NEVER) 
必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反) 
@Transactional(propagation=Propagation.SUPPORTS) 
如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务. 

事务超时设置: 
@Transactional(timeout=30) //默认是30秒 

事务隔离级别: 
@Transactional(isolation = Isolation.READ_UNCOMMITTED) 
读取未提交数据(会出现脏读, 不可重复读) 基本不使用 
@Transactional(isolation = Isolation.READ_COMMITTED) 
读取已提交数据(会出现不可重复读和幻读) 
@Transactional(isolation = Isolation.REPEATABLE_READ) 
可重复读(会出现幻读) 
@Transactional(isolation = Isolation.SERIALIZABLE) 
串行化 

@Transactional(propagation=Propagation.NESTED)   
@Transactional (propagation = Propagation.REQUIRED,readOnly=true) //readOnly=true只读,不能更新,删除   
@Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间   
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置数据库隔离级别 

@Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期例外 
@Transactional(rollbackFor=Exception.class) //指定回滚,需要捕获的例外 

MYSQL: 默认为REPEATABLE_READ级别 
SQLSERVER: 默认为READ_COMMITTED 

脏读 : 一个事务读取到另一事务未提交的更新数据 
不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 
后续读取可以读到另一事务已提交的更新数据. 相反, "可重复读"在同一事务中多次 
读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据 
幻读 : 一个事务读到另一个事务已提交的insert数据
分享到:
评论

相关推荐

    spring 注解事务管理

    以下是对"spring注解事务管理"这一主题的详细解释。 ### 1. Spring事务管理的基本概念 Spring事务管理主要分为两种方式:编程式事务管理和声明式事务管理。编程式事务管理是通过编写代码来控制事务的开始、提交、...

    Spring事务管理Demo

    2. **声明式事务管理**:这是Spring最常用的方式,通过在配置文件或者使用`@Transactional`注解来定义事务边界,使得事务管理与业务逻辑分离,降低了代码的耦合度。`@Transactional`注解可以应用于方法级别,表示该...

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    **声明式事务管理** 是通过在方法上添加`@Transactional`注解,让Spring自动管理事务。这种方式更加简洁,降低了代码的复杂性。`@Transactional`可以设置不同的属性,如`propagation`(传播行为)、`isolation`...

    实验 spring 声明事务

    实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...

    spring注解事务实现demo

    Spring框架在事务管理方面...总结来说,`@Transactional`注解极大地简化了Spring应用程序中的事务管理,使得开发者可以更专注于业务逻辑,而不是事务控制。通过合理的配置和使用,可以有效地保证数据的一致性和完整性。

    spring 事务基于注解模式

    Spring提供了多种事务管理方式,其中基于注解的事务管理是近年来常用的模式,因为它简化了代码并提高了可读性。本文将深入探讨Spring中的基于注解的事务管理及其工作原理。 ### 1. Spring事务管理概述 Spring事务...

    Spring的事务管理小案例

    在本文中,我们将深入探讨Spring框架中的事务管理。Spring是一个广泛应用的Java企业级应用开发框架,它提供了强大的事务管理功能,使得开发者可以方便地控制事务的边界,保证数据的一致性和完整性。 首先,理解事务...

    spring事务管理5种方法

    声明式事务管理是Spring最常用的事务管理方式,它通过在配置文件或者注解中声明事务边界,将事务管理与业务代码分离。具体分为两种: - XML配置:在Spring的配置文件中,可以使用`&lt;tx:advice&gt;`定义事务处理规则,...

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

    ### 深入理解Spring的事务管理机制 #### 一、事务的基本原理 Spring框架的事务管理机制是在Java开发环境中非常重要的一个组成部分,它能够帮助开发者简化事务处理的复杂度,提高应用程序的一致性和可靠性。Spring...

    spring_事务管理(实例代码)

    2. 基于注解的声明式事务管理:Spring支持在方法上使用@Transactional注解来标记需要事务管理的方法。这个注解可以设置事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别、读写模式以及超时时间。例如,`@...

    spring hibernate 事务管理学习笔记(一)

    通过理解Spring的事务管理机制,熟练运用`@Transactional`注解,以及深入源码探究其内部工作原理,你将能够更好地应对各种复杂的事务场景。而在这个过程中,优秀的学习资源和实用的开发工具将是你宝贵的助手。

    spring3.0两种事务管理配置

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

    spring JDBC事务管理

    2. **声明式事务管理**:这是Spring的一个强大特性,允许开发者在配置文件或注解中声明事务边界,将事务管理与业务代码分离。Spring支持基于XML的配置和基于注解的事务管理。例如,可以使用`@Transactional`注解标记...

    Spring事务管理开发必备jar包

    编程式事务管理通过TransactionTemplate或直接调用PlatformTransactionManager接口的方法来管理事务,而声明式事务管理则通过在配置文件或注解中定义事务规则,让Spring自动处理事务开始、提交、回滚等操作。...

    spring boot注解事务+多线程

    综上所述,Spring Boot通过`@Transactional`注解实现了简单而强大的事务管理,保证了数据一致性;而`@Async`注解则让我们轻松地实现多线程,提升了应用的并发性能。结合适当的线程池配置,我们可以灵活地调整系统...

    spring 事务管理的理解

    2. 声明式事务管理:这是Spring 的主要推荐方式,它通过在配置或者注解中声明事务边界。Spring 使用AOP(面向切面编程)来实现这一功能。我们可以使用@Transactional注解在方法级别声明事务,Spring AOP代理会在方法...

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    Spring事务管理的jar包

    相比之下,声明式事务管理更为简洁,通过在配置文件或注解中声明事务规则,由Spring框架自动处理事务的开始、提交、回滚等操作。 `spring-tx-3.2.0.RELEASE.jar`是Spring事务管理模块的核心库,它包含了Spring对...

    spring_如何管理事务的

    Spring通过AOP(面向切面编程)技术实现了声明式事务管理,可以通过XML配置或注解来实现。 ##### 1. XML配置示例 ```xml &lt;!-- 定义数据源 --&gt; &lt;!-- 配置数据源参数 --&gt; &lt;!-- 定义事务管理器 --&gt; ...

Global site tag (gtag.js) - Google Analytics