springboot~Transactional注解的注意事项

@Transactional注解是为方法添加事务块的意思,使用aop的技术动态为方法添加事务范围,在使用它时可以在类或者方法上添加,但在类上添加时需要注意一下影响的范围。

类中添加Transactional

相当于你的每个公共的方法都会被迫加上事务,这并不是一件好事,所以不建议这样干。

拦截器里调用的Bean

在http的拦截器里,调用了一个类,这个类是个bean,而它被添加了Transactional注解,这相当于,你以后的每个HTTP请求都会被加上事务,这是很要命的,因为那些单表操作是不需要添加事务的。

事物传播行为介绍

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

事务隔离级别

  1. @Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据(会出现脏读, 不可重复读) 基本不使用
  2. @Transactional(isolation = Isolation.READ_COMMITTED):读取已提交数据(会出现不可重复读和幻读)
  3. @Transactional(isolation = Isolation.REPEATABLE_READ):可重复读(会出现幻读)
  4. @Transactional(isolation = Isolation.SERIALIZABLE):串行化

完毕,对bean的事务块使用大家要格外注意。

原文地址:https://www.cnblogs.com/lori/p/12101868.html

时间: 2024-11-14 12:49:04

springboot~Transactional注解的注意事项的相关文章

springboot 项目中使用@transactional注解不生效导致事务回滚失败问题总结

在常规使用@transactional注解时,如果碰到不生效问题,要首先想到如下几个问题: 1. 如果是有关数据库操作,首先要查看牵涉到的表使用的引擎是什么引擎,要知道使用"MYISAM"数据库引擎是不支持事务回滚操作的,需要使用"InnoDB数据引擎". 2. 查看方法是否是public方法,如果方法是private方法,也是不支持事务的. 3. 如果事务回滚失败还要查看出现的异常是checked异常还是unchecked异常.checked异常会回滚,unche

SpringBoot核心注解应用

1.今日大纲 了解Spring的发展 掌握Spring的java配置方式 学习Spring Boot 使用Spring Boot来改造购物车系统 2.Spring的发展 Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换. Spring2.x时代 随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文

Spring SpringMVC SpringBoot SpringCloud 注解整理大全

Spring SpringMVC SpringBoot SpringCloud 注解整理 这段时间学习了一些框架,里面用到了很多注解,记不住所以把遇到的注解都整理了下来,如果有不对的地方欢迎指正,我会修改的φ(??∀??)? Spring 常用配置: @import :导入配置类 @Scope : 新建Bean的实例 @Scope("prototype") 声明Scope 为 Prototype @Value : 属性注入 @Value ("我爱你") -->

@Transactional注解失效的解决方案

一.前言 开发中我们经常使用 @Transactional注解来启用Spring事务管理,但是如果使用方法不当,会遇到注解不生效该事务回滚的地方却没有回滚的问题. 总结下一般是以下几个原因: @Transactional 注解只能应用到 public 可见度的方法上. 如果应用在protected.private或者 package可见度的方法上,也不会报错,不过事务设置不会起作用. 默认情况下,spring会对unchecked异常进行事务回滚:如果是checked异常则不回滚.针对这种情况,

SSM框架中使用Spring的@Transactional注解进行事务管理

一 介绍 在企业级应用中,保护数据的完整性是非常重要的一件事.因此不管应用的性能是多么的高.界面是多么的好看,如果在转账的过程中出现了意外导致用户的账号金额发生错误,那么这样的应用程序也是不可接受的 数据库的事务管理可以有效地保护数据的完整性(PS:关于数据库的事务管理基础可以参考我以前写过的这篇文章:http://www.zifangsky.cn/385.html),但是原生态的事务操作需要写不少的代码,无疑是非常麻烦的.在使用了Spring框架的应用中,我们可以使用@Transactiona

Spring中的事物管理,用 @Transactional 注解声明式地管理事务

事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四个关键属性: 原子性:事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用. 一致性:一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中. 隔离性:可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来,

spring+hibernate+Struts2 整合(全注解及注意事项)

最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar包如下 3.首先是spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

差一点搞混了Transactional注解

今天给我的Srping业务层加如下Service和Transactional注解: @Service @Scope(BeanDefinition.SCOPE_SINGLETON) @Transactional(propagation=Propagation.REQUIRED, timeout=600, rollbackFor=Exception.class)   结果总是不认propagation.timeout和rollbackFor,后来才发现我引入类定义错了,本来应该用Spring的org

spring,mybatis事务管理配置与@Transactional注解使用

spring,mybatis事务管理配置与@Transactional注解使用[转] 概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects) 支持声明式事务管理,特别是基