首页 > 其他分享 >Spring事务

Spring事务

时间:2022-11-22 18:15:19浏览次数:73  
标签:事务 Spring Transactional 特性 注解 数据库 属性

1 什么是事务?

事务(Transaction)是数据库区别于文件系统的重要特性之一。目前国际认可的数据库设计原则是ACID特性,用以保证数据库事务的正确执行。Mysql的innodb引擎中的事务就完全符合ACID特性。

 

 

 

2 事务的ACID特性

    •    原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。--》主要涉及InnoDB事务。相关特性:事务的提交,回滚,信息表。

    •    一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。在事务开始前后,数据库的完整性约束没有被破坏。例如违反了唯一性,必须撤销事务,返回初始状态。--》主要涉及内部InnoDB处理,以保护数据不受崩溃,相关特性:双写缓冲、崩溃恢复。

    •    隔离性(isolation):每个读写事务的对象对其他事务的操作对象能相互分离,即:事务提交前对其他事务是不可见的,通常内部加锁实现。--》主要涉及事务,尤其是事务隔离级别,相关特性:隔离级别、innodb锁的底层实现细节。

    •    持久性(durability):一旦事务提交,则其所做的修改会永久保存到数据库。--》涉及到MySQL软件特性与特定硬件配置的相互影响,相关特性:4个配置项:双写缓冲开关、事务提交刷新log的级别、binlog同步频率、表文件;写缓存、操作系统对于fsync()的支持、备份策略等。


3 事务的属性

要保证事务的ACID特性,spring给事务定义了6个属性,对应于声明式事务注解(org.springframework.transaction.annotation.Transactional)@Transactional(key1=*,key2=*...)

  • 事务名称:用户可手动指定事务的名称,当多个事务的时候,可区分使用哪个事务。对应注解中的属性value、transactionManager
  • 隔离级别:  为了解决数据库容易出现的问题,分级加锁处理策略。 对应注解中的属性isolation
  • 超时时间:  定义一个事务执行过程多久算超时,以便超时后回滚。可以防止长期运行的事务占用资源.对应注解中的属性timeout
  • 是否只读:表示这个事务只读取数据但不更新数据, 这样可以帮助数据库引擎优化事务.对应注解中的属性readOnly
  • 传播机制:  对事务的传播特性进行定义,共有7种类型。对应注解中的属性propagation
  • 回滚机制:定义遇到异常时回滚策略。对应注解中的属性rollbackFor、noRollbackFor、rollbackForClassName、noRollbackForClassName

 

4 Transactional使用

service1方法:
@Transactional(transactionManager="transactionManager1",propagation = Propagation.REQUIRED)
  public void m1(){
    this.jdbcTemplate.update("insert into user1(username) VALUES (?)","aa");
    service2.m2();
    }
service2方法:
@Transactional(transactionManager="transactionManager1",propagation = Propagation.REQUIRED)
  public void m2(){
    this.jdbcTemplate.update("insert into user1(username) VALUES (?)","ss");}

https://blog.csdn.net/zkcJava/article/details/120511628

 

5 Transactional失效场景

https://baijiahao.baidu.com/s?id=1661565712893820457&wfr=spider&for=pc

5.1 @Transactional 应用在非 public 修饰的方法上

5.2 @Transactional 注解属性 propagation 设置错误

这种失效是由于配置错误,若是错误的配置以下三种 propagation,事务将不会发生回滚。

TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

5.3 @Transactional 注解属性 rollbackFor 设置错误

5.4 同一个类中方法调用,导致@Transactional失效

5.5 异常被你的 catch“吃了”导致@Transactional失效

 

标签:事务,Spring,Transactional,特性,注解,数据库,属性
From: https://www.cnblogs.com/ningshare/p/16915969.html

相关文章

  • Apache Geode 的 Spring Data(数据)(三)
    6.12.4.配置过期与逐出一起,过期还可用于管理内存允许存储在区域中的条目过期。ApacheGeode同时支持生存时间(TTL)和空闲超时(TTI)条目过期策略。SpringDataforApacheG......
  • SpringBoot
    AOP@EnableAspectJAutoProxy@Aspect@Pointcut@Before@After@Around@AfterThrowing@AfterReturning配置文件参数自动转List类型参数自动转为List@Value("#{'${c......
  • Spring Cloud Feign 压缩配置导致的字符混乱(only regular white space )
     [nio-9601-exec-2].w.s.m.s.DefaultHandlerExceptionResolver:Resolved[org.springframework.http.converter.HttpMessageNotReadableException:JSONparseerro......
  • Apache Geode 的 Spring Data(数据)(二)
    6.使用注释使用弹簧容器引导ApacheGeodeSpringDataforApacheGeode(SDG)2.0引入了一个新的基于注释的配置模型使用Spring容器配置和引导ApacheGeode。引入基于......
  • idea中springboot项目的application.properties没效果
    从svn中拉的源码, .idea文件夹没上传到svn, 拉下来后resources目录下的application.properties不起作用, 还是默认使用8080端口启动, 在resources目录上面右击, 选择......
  • Apache Geode 的 Spring Data(数据)
    版本2.7.6SpringDataforApacheGeode专注于集成SpringFramework强大的非侵入式编程模型。以及使用ApacheGeode简化Java应用程序的配置和开发的概念当使用Apache......
  • Apache Cassandra 的 Spring Data(数据)
    版本4.0.0SpringDataforApacheCassandra项目将核心Spring概念应用于使用CassandraColumnar数据存储开发解决方案。“模板”作为存储和查询文档的高级抽象提供。......
  • Apache Cassandra 的 Spring Data(数据)(二)
    8.简介参考文档的这一部分解释了SpringDataforApacheCassandra提供的核心功能。CassandraSupport引入了Cassandra模块功能集。反应式Cassandra支持解释了反应式......
  • Apache Cassandra 的 Spring Data(数据)(三)
    13.反应式Cassandra存储库本章概述了ApacheCassandra的反应式存储库支持所处理的特性。它建立在Cassandra 存储库中解释的核心存储库基础架构之上,因此您应该对其中......
  • Apache Cassandra 的 Spring Data(数据)附录(四)
    附录A:命名空间引用元素​​<repositories/>​​该元素触发了Spring数据存储库基础结构的设置。最重要的属性是,它定义了要扫描Spring数据存储库接口的包。请参阅“​​......