spring事务管理

Spring面试题部分总结【慨念】

眉间皱痕 提交于 2020-02-29 11:25:54
什么是Spring? spring是一个企业级应用的开源开发框架,主要用来开发java应用,spring框架目标就是简化企业级应用开发。 Spring用到了那些设计模式? spring里面用到了大量的设计模式,这里举例比较有代表性的: 代理模式:在aop中使用比较多 单例模式:在spring配置文件定义的bean默认为单例模式 模板模式:用来解决代码重复问题 工厂模式:BeanFactory用来创建对象的实例。 使用Spring框架有什么好处? 1.轻量:spring是轻量的,基本版本大约2MB 2.控制反转;spring通过这个实现了松散耦合,对象给他们依赖,而不是创建对象 3.spring支持面向切面的编程,并且把业务逻辑和系统服务分开 4.spring容器包含管理应用中对象的声生命周期和配置 什么是Spring IOC容器? spring IOC 负责创建对象,管理对象(通过依赖注入),装配对象,配置对象,并管理对象的生命周期 IOC的优点是什么? IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,最小的代价和最小的侵入性使松散耦合得以实现 ApplicationContext通常实现的是什么? ClassPathXmlApplicationContext :此容器从一个xml文件中加载beans的定义。xml bean 配置文件的全路径名必须提供给他的构造函数。

JAVA中的事务,事务模块总结

不想你离开。 提交于 2020-02-28 13:12:42
大家好,这是一个为了梦想而保持学习的博客。这是第二篇文章,分享一下我对【事务】的理解​。文章的风格会一直保持问答的方式讲述,这是我个人喜欢的一种风格,也是相当于模拟面试。 什么是事务? 简单的来说,一条SQL执行或则几条SQL一起执行时,我们希望这个SQL要么执行成功后提交,要么执行失败后回滚,这是我们最直观的理解。在上面这句话中,就包含了事务的几个必要属性: "执行成功后提交",意味着持久性;"执行失败后回滚",意味着一致性;"要么成功,要么失败",意味着原子性 。他们的具体理解如下: 原子性(A) :事务要么执行成功,要么执行失败,没有第三种状态。 一致性(C) :事务执行的前后数据要一致,也就是说执行成功后数据的更改和预期一致,执行失败需要回滚到更改前数据。 隔离性( I ) :多个事务并发执行时,相互隔离,互不影响。 持久性(D ):事务提交后,对数据的更改是永久性的。也就说,哪怕数据库崩溃了,那些数据也是可以被恢复过来的。 事务是如何实现的? 事务的实现分为两个部分,一个是数据库底层的事务实现,另外一个是基于Spring去实现事务管理。这里主要是讲数据库(mysql-innodb)层面的实现。下面会围绕上面所说的ACID属性来讲mysql的底层实现。 redo日志与原子性、持久性的关系 redo日志是mysql-innodb底层的一个日志文件

Spring事务失效的原因总结

纵饮孤独 提交于 2020-02-27 13:23:29
用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景? 不见得总结全,但希望可以帮忙有需要的人。 1、数据库引擎不支持事务 这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。 根据 MySQL 的官方文档: https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html 从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。 2、没有被 Spring 管理 如下面例子所示: // @Service public class OrderServiceImpl implements OrderService { @Transactional public void updateOrder ( Order order ) { // update order } } 如果此时把 @Service 注解注释掉,这个类就不会被加载成一个 Bean,那这个类就不会被 Spring 管理了,事务自然就失效了。 3、方法不是 public 的 以下来自 Spring 官方文档: When using proxies,

Spring5学习(六)Spring 事务

家住魔仙堡 提交于 2020-02-27 08:27:11
Spring 事务 1. 事务 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。 事务是恢复和 并发控制 的基本单位。 2. 为什么要事务 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。 3. 事务的4个特性(ACID) 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID特性 。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。指一个事务一旦提交

Spring 事务-06-事务拦截器-TransactionInterceptor

那年仲夏 提交于 2020-02-27 04:33:53
1 用途 使用公共Spring事务基础结构({ @link PlatformTransactionManager})实现声明性事务管理的AOP Alliance MethodInterceptor。 这个类派生自{ @link TransactionAspectSupport}类,该类包含与Spring底层事务API的集成。 TransactionInterceptor只是按照正确的顺序调用相关的超类方法,比如{ @link #invokeWithinTransaction}。 实现了 MethodInterceptor接口,重写invoke()方法,实现此方法以在调用之前和之后执行额外的处理。 2 类结构 3 代码分析 import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.BeanFactory; import org.springframework.lang.Nullable; import org.springframework

Spring 事务-05-事务基类-TransactionAspectSupport

馋奶兔 提交于 2020-02-27 04:20:53
1 用途 事务方面的基类,如{ @link TransactionInterceptor}或AspectJ方面。 这使得底层的Spring事务基础结构可以很容易地用于为任何方面系统实现方面。 子类负责以正确的顺序调用该类中的方法。 注意:这个类不能实现Serializable,因为它是AspectJ方面的基类(不允许实现Serializable)! 2 类图 3 类核心方法 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils; import org.springframework.core.NamedThreadLocal; import org

Spring 事务-04-隔离和传播-1-TransactionDefinition

孤人 提交于 2020-02-27 01:09:35
TransactionDefinition 实例(默认描述传播行为、隔离级别、超时等。 类图如下: 接口分析如下: package org.springframework.transaction; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.lang.Nullable; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; import org.springframework.transaction.support.AbstractPlatformTransactionManager; import java.sql.Connection; /** * 定义与spring兼容的事务属性的接口,可以设置传播行为、隔离级别、超时等。 * 基于类似于EJB CMT属性的传播行为定义。 * * 注意,除非启动一个实际的新事务,否则不会应用隔离级别和超时设置。 * 因为只有{@link #PROPAGATION_REQUIRED}

面试官:分布式事务了解吗?你们是如何解决分布式事务问题的?

▼魔方 西西 提交于 2020-02-26 03:05:33
面试官心理分析 只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。 现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配了。因为你做系统肯定要用事务吧,如果是分布式系统,肯定要用分布式事务吧。先不说你搞过没有,起码你得明白有哪几种方案,每种方案可能有啥坑?比如 TCC 方案的网络问题、XA 方案的一致性问题。 面试题剖析 分布式事务的实现主要有以下 5 种方案: XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案 两阶段提交方案/XA方案 所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不 ok,那么就回滚事务。 这种分布式事务方案,比较适合单块应用里,跨多个库的分布式事务,而且因为严重依赖于数据库层面来搞定复杂的事务,效率很低,绝对不适合高并发的场景。如果要玩儿,那么基于 Spring + JTA 就可以搞定,自己随便搜个 demo 看看就知道了。 这个方案,我们很少用,一般来说某个系统内部如果出现跨多个库的这么一个操作,是不合规的。我可以给大家介绍一下,

对注解@Transactional的解读

送分小仙女□ 提交于 2020-02-25 22:19:30
在SpringBoot则非常简单,只需在业务层添加事务注解(@Transactional )即可快速开启事务。虽然事务很简单,但对于数据方面是需要谨慎对待的。 @Transactional注解用于两种场景: 标于类上:表示所有方法都进行事务处理 标于方法上:仅对该方法有效 一、事务传播行为 @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

Spring事务管理之几种方式实现事务(转)

我怕爱的太早我们不能终老 提交于 2020-02-25 00:30:35
转自 一:事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销。Spring事务管理基于底层数据库本身的事务处理机制。数据库事务的基础,是掌握Spring事务管理的基础。这篇总结下Spring事务。 事务具备ACID四种特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。 (1)原子性(Atomicity)     事务最基本的操作单元,要么全部成功,要么全部失败,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。   (2)一致性(Consistency)     事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。   (3)隔离性(Isolation)     指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态