你了解的Spring 的 @Transactional 注解控制事务,失效场景知多少?

作者&投稿:司马仲 (若有异议请与网页底部的电邮联系)
~

这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。

根据 MySQL 的官方文档:

https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html

从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是无济于事。

如下代码所示,当前数据源若没有配置事务管理器,那也是白搭!

@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

如果此时把 @Service 注解注释掉,这个类就不会被加载成一个 Bean,那这个类就不会被 Spring 管理了,事务自然就失效了。

以下引自spring官方文档:

大致意思是:

@Transactional 只能用于 public 的方法上,否则事务会失效。如果要用在非 public 方法上,可以开启 AspectJ 代理模式。

例1:

例1 中,update方法上面没有加 @Transactional 注解,调用有 @Transactional 注解的 updateOrder 方法,updateOrder 方法上的事务管用吗?

例2:

例2 中,update方法上面加了 @Transactional 注解,调用有 @Transactional 注解的 updateOrder 方法,updateOrder 方法上的事务管用吗?

很遗憾,这两个例子中, updateOrder 方法上的事务都不管用

因为它们发生了自身调用,就是调该类自己的方法,而没有经过 Spring 的代理类,默认只有在外部调用事务才会生效,这也是老生常谈的经典问题了。

6.1这个也是出现比较多的场景:把异常吃了,然后又不抛出来,事务也不会回滚!

6.2

这样事务也是不生效的,因为默认回滚的是:RuntimeException,如果你想触发其他异常的回滚,需要在注解上配置一下,如:

@Transactional(rollbackFor = Exception.class)
这个配置仅限于 Throwable 异常类及其子类。

Propagation.NOT_SUPPORTED:表示不以事务运行,当前若存在事务则挂起。这表示不支持以事务的方式运行,所以即使事务生效也是白搭!




spring 都需要什么基础
需要你熟悉Java语言。-理解高级程序语言在电脑上运行的基本原理;-理解Java语言从编译、到执行的整个过程和原理;-理解Java语言中类、目标、实例等概念,和区别并且可以灵活运用。-如果还有一定GoF、J2EE设计模式的知识就更好了。如果有人教你,可以边用边学。学习其他框架同样需要理解以上内容。

北大青鸟java培训:学习Spring的学习路线?
对于java编程开发程序员来说,掌握新的编程技术能力能够让自己的职业发展更加顺利,下面IT培训http:\/\/www.kmbdqn.cn\/就一起来了解一下,java程序员学习学习Spring的基础要求。Spring官网页是这么介绍自己的——“Spring:thesourceformodernJava”,这也暗示着Spring与Java有着密切的关系,虽然Spring现在也支持...

spring框架工作流程(spring框架工作原理)
在了解SpringBoot的启动流程的时候,我们先看一下一个SpringBoot应用是如何启动的,如下是一个简单的SpringBoot程序,非常的简洁,他是如何做到的呢,我们接下来就将一步步分解。你能够使用SpringBoot创建Java应用并通过java-jar来运行或者创建传统的通过war来部署的应用。SpringBoot也提供了一个命令行工具来...

了解springcloud?
3、SpringCloudGateway作为SpringCloud生态系统中的网关,目标是替代NetflixZuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控\/指标,和限流。你所理解的SpringCloud是什么?SpringCloud是一系列微服务框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式...

如何阅读spring源码?
SpringSecurity源码整体解析遍历securityFilterChainBuilders(其实就是HttpSecurity)列表调用其build方法,生成SecurityFilterChain实例,最后利用多个SecurityFilterChain实例组成List,再封装到FilterChainProxy。本文适合:对SpringSecurity有一点了解或者跑过简单demo但是对整体运行流程不明白的同学,对SpringSecurity有...

快速了解获取Spring Bean的8种方式
在Spring框架项目中,遇到提前使用bean或处理特殊场景下的空指针异常时,了解和掌握多种bean获取方式至关重要。以下列出8种常见的获取Spring Bean的方法:1. ClassPathXmlApplicationContext: 通过从src\/main\/resources路径加载XML配置文件,创建ApplicationContext实例来获取bean。例如,先定义xml配置,然后在Java...

spring事务的传播机制
JAVA EE应用中事务处理是一个非常重要并且设计范围很广的领域。作为应用平台的SPRING,具有在多种环境配置和使用事务处理的能力,了解spring事务的传播机制,可以更好的帮助我们在实际项目中使用事务来处理各种业务场景。所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项...

原来IoC、AOP和bean的生命周期,还可以这样理解!爱了
Spring的核心功能——IoC(依赖注入)和AOP(面向切面编程)在bean的管理和代理增强中起着关键作用。要深入了解,我们可以从Spring的启动流程入手。1. Spring IoC的启动流程首先,Spring容器的初始化包含三个关键步骤:创建容器、注册配置类和刷新容器。启动过程分为两部分:Bean的生命周期,包括创建实例和...

Spring中的@Configuration注解你真的了解吗?
环境:Springboot2.3.12.RELEASE 如下:输出:将上面的@Configuration注解换成@Component后再次运行:多个实例。使用@Configuration注解的类会为何会保证多次方法的调用返回的是同一个实例?创建上下文最核心的就是注册了一个 BeanFactory 处理器 跟踪createApplicationContext方法 进入 ApplicationContext...

SpringCloud五大核心组件,超详细介绍!
让我们先从一张Spring Cloud的架构图开始了解其核心组件。Spring Cloud旨在简化分布式系统开发,提供了诸如配置管理、服务发现、断路器、智能路由和微代理等常见模式的工具。这些工具帮助开发人员快速构建能在各种环境,如个人电脑、裸机数据中心或云平台如Cloud Foundry中运行的分布式应用。想象一个电商网站的...

梁园区17510151686: 面试官问你说下你了解的spring,要怎么回答才显得你比较了解spring,求比较深入spring的回答. -
狂彬异丁: 首先最核心的是告诉面试官:spring是一个高效的管理对象的容器,是一种规范,能大大提高项目的开发管理维护.开发人员通过xml配置就能完成对象的注册,剩下的工作就是spring使用IOC完成对象的注入,期间不需要程序员干预,如果需要...

梁园区17510151686: 怎么回答面试官:你对Spring的理解? -
狂彬异丁: 首先Spring是一个大的概念,Spring从最开始的一个Library到现在一个系列,其中最主要的包括Spring Framework, Spring Data, Spring Security, Spring Batch等等,以及快速框架Spring Boot,其中最重要的项目是Spring Framework,这个项目包括了IoC, AOP, MVC以及Testing等!

梁园区17510151686: 如果一个面试官问你什么是Spring,它有什么用,怎么回答才是最好的? -
狂彬异丁: Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅限于服务器端的开发.从简单性、可测试性和松耦合的...

梁园区17510151686: 请你谈谈对spring的理解? -
狂彬异丁: 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时,要是产生的是单例的bean,他还可以给管理bean的生...

梁园区17510151686: 什么是spring -
狂彬异丁: 1.1.1 Spring是什么Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由一组相互协作的对象组成.而在传统应用程序开发中,一个完整的应用是由...

梁园区17510151686: Spring 的工作原理? -
狂彬异丁: Spring的核心就在于他的IOC(控制反转)和AOP(面向切面编程),IOC就是用来管理所有的业务对象,AOP也就是可以在调用的方法前后可以附加另外的行为

梁园区17510151686: 什么是计算机中的spring -
狂彬异丁: 你好,Spring是于2003 年兴起的一个轻量级的Java 开发框架,它是为了解决企业应用开发的复杂性而创建的.简单的说,是一个框架.更简单的的说,是一堆程序代码.这个东西是给程序员用的,用来在它的基础之上,编写自己的程序等.

梁园区17510151686: spring的实际应用是什么 -
狂彬异丁: 个人理解啊,我一般也不看文档的,都是实际使用中个人的理解.使用spring的话,一个好处是面向接口编程,通过spring配置接口的具体实现类,这样可以提高程序的灵活性.比如在一个类A中要调用另一个类B的一个数据库查询操作.如果直...

梁园区17510151686: Spring的理解? -
狂彬异丁: Spring是一系列web框架技术的综合,其特点是轻量级,非侵入性、解耦设计等.如SpringFramwork, Spring JDBC, Spring AOP, Spring MVC等等.一般用的最多的是它的IoC/DI, 即反转控制/依赖注入,例如用xml声明Bean,运行时注入.另外一个技术AOP,面向切面编程,也用的很广,比如声明式的数据库事务.在很大程度上综合应用以上技术可以取代笨重的EJB提供的功能.

梁园区17510151686: 什么是SPRING
狂彬异丁: 楼上得很夸张噢`其实就是春天的意思 作爲动词时就是跳跃的意思和由____产生的意思

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网