spring 事务注解

Spring事务传播行为类型


事务传播行为类型


说明


PROPAGATION_REQUIRED


如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。


PROPAGATION_SUPPORTS


支持当前事务,如果当前没有事务,就以非事务方式执行。


PROPAGATION_MANDATORY


使用当前的事务,如果当前没有事务,就抛出异常。


PROPAGATION_REQUIRES_NEW


新建事务,如果当前存在事务,把当前事务挂起。


PROPAGATION_NOT_SUPPORTED


以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。


PROPAGATION_NEVER


以非事务方式执行,如果当前存在事务,则抛出异常。


PROPAGATION_NESTED


如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类 似的操作。

spring 事务注解

    默认遇到throw new RuntimeException("...");会回滚
    需要捕获的throw new Exception("...");不会回滚
    // 指定回滚@Transactional(rollbackFor=Exception.class) 
    public void methodName() { // 不会回滚
       throw new Exception("...");
    } 
    //指定不回滚@Transactional(noRollbackFor=Exception.class)    
    public ItimDaoImpl getItemDaoImpl() { // 会回滚
        throw new RuntimeException("注释");
    } 

    // 如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
    @Transactional(propagation=Propagation.REQUIRED) 
    // 容器不为这个方法开启事务
    @Transactional(propagation=Propagation.NOT_SUPPORTED)    
    // 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
    @Transactional(propagation=Propagation.REQUIRES_NEW) 
    // 必须在一个已有的事务中执行,否则抛出异常
    @Transactional(propagation=Propagation.MANDATORY)    
    // 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
    @Transactional(propagation=Propagation.NEVER) 
    // 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
    @Transactional(propagation=Propagation.SUPPORTS) 
    
    /*
    public void methodName(){
       // 本类的修改方法 1
       update();
       // 调用其他类的修改方法
       otherBean.update();
       // 本类的修改方法 2
       update();
    }
    other失败了不会影响 本类的修改提交成功
    本类update的失败,other也失败    
    */
    @Transactional(propagation=Propagation.NESTED) 
    // readOnly=true只读,能插入,但不能更新,删除 
    @Transactional (propagation = Propagation.REQUIRED,readOnly=true) 
    // 设置超时时间
    @Transactional (propagation = Propagation.REQUIRED,timeout=30)
    // 设置数据库隔离级别
    @Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)
时间: 2024-11-03 21:29:07

spring 事务注解的相关文章

Spring事务注解

使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:tx="http://www.springframework.org/schema/tx"  xsi:schemaLoca

23. Spring 事务注解@Transactional和异常捕获

一. 事务注解限制条件 1. 不允许在private方法上面 2. 不能在非事务方法里面调用事务方法 二. 实现机制-异常捕获 Describes transaction attributes on a method or class. This annotation type is generally directly comparable to Spring's org.springframework.transaction.interceptor.RuleBasedTransactionA

手动实现自己的spring事务注解

spring事务是基于同一个数据连接来实现的,认识到这一点是spring事务的关键,spring事务的关键点便在于在事务中不管执行几次db操作,始终使用的是同一个数据库连接.通过查看源码,我们可以看到spring事务实现思路如下 这其中的关键点就在于如何保证在事务内获取的数据库连接为同一个以及通过aop来代理数据库连接的提交.回滚.代码如下 构建自己的事务管理器,使用threadlocal来保证一个线程内获取到的数据库连接为同一个 package com.jlwj.custom; import

Spring事务注解@Transactional失效的问题

在项目中发现事务失效,使用@Transactional注解标注的Service业务层实现类方法全部不能回滚事务了,最终发现使用因为Spring与shiro进行整合之后导致的问题,将所有的Service层实现类都添加如下注解 @Scope(proxyMode= ScopedProxyMode.TARGET_CLASS) 将代理方式换成CGLib的代理方式之后得以解决,最终不明原因,如有看到这篇博客并知道答案的朋友请留言告知 如果事务不能回滚,也需要考虑如下几点: 表得存储引擎为MyISAM是没有事

Spring 事务注解 错误问题

碰到个问题,在一个springmvc项目中,设置好事务,然后在service上添加@Transactional注解,只要一添加这个注解,该service就无法被spring创建成功, error creating bean with name xxx什么的.搞了半天,发先service写成Interface加Implement的方式就可以了,也就是Service要写接口和实现. 具体原理不清楚,估计是动态代理的问题.有谁了解详情的话可以在评论里告知一下.

Spring 事务注解@Transactional

事务管理一般有编程式和声明式两种,编程式是直接在代码中进行编写事物处理过程,而声名式则是通过注解方式或者是在xml文件中进行配置,相对编程式很方便. 而注解方式通过@Transactional 是常见的.我们可以使用@EnableTransactionManagement 注解来启用事务管理功能,该注解可以加在启动类上或者单独加个配置类来处理. 1.Transactional 注解的属性 name 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器

【spring 事务注解配置】事务回滚

注解配置参考: http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 自己测试发现事务没成功,原因是 我测试的表是myisam 存储引擎.myisam不支持事务,一个坑 了我! myisam 和 innodb对比 http://www.cnblogs.com/merlini/p/4079313.html

Spring 之注解事务 @Transactional

众所周知的ACID属性:  原子性(atomicity).一致性(consistency).隔离性(isolation)以及持久性(durability).我们无法控制一致性.原子性以及持久性,但可以控制超时,设置事务的只读性以指定隔离级别.  Spring在TransactionDefinition接口封装了所有这些设置. Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型

深入理解 Spring 事务原理

一.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con = DriverManager.getConnection() 开启事务con.setAutoCommit(true/false); 执行CRUD 提交事务/回滚事务 con.commit() / con.rollback(); 关闭连接 conn.close(); 使