Java每日面试题5题(二)—— Spring相关篇三

说说事务的隔离级别

  • 未提交读(Read Uncommitted)

允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

  • 提交读(Read Committed)

只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)

  • 可重复读(Repeated Read)

在同一个事务内的查询都是事务开始时刻一致的,Mysql的InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读(多个事务同时修改同一条记录,事务之间不知道彼此存在,当事务提交之后,后面的事务修改的数据将会覆盖前事务,前一个事务就像发生幻觉一样)

  • 可串行化(Serializable)

完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

  • 总结
事务隔离级别 脏读 不可重复读 幻读
读未提及(READ_UNCOMMITTED) 允许 允许 允许
读已提交(READ_COMMITTED) 禁止 允许 允许
可重复读(REPEATABLE_READ) 禁止 禁止 允许
顺序读(SERIALIZABLE) 禁止 禁止 禁止

不可重复读和幻读的区别主要是:解决不可重复读需要锁定了当前满足条件的记录,而解决幻读需要锁定当前满足条件的记录及相近的记录。

比如查询某个商品的信息,可重复读事务隔离级别可以保证当前商品信息被锁定,解决不可重复读

但是如果统计商品个数,中途有记录插入,可重复读事务隔离级别就不能保证两个事务统计的个数相同

说说事务的传播级别

Spring事务定义了7种传播机制

  • PROPAGATION_REQUIRED

默认的Spring事物传播级别,若当前存在事务,则加入该事务,若不存在事务,则新建一个事务

  • PAOPAGATION_REQUIRE_NEW

若当前没有事务,则新建一个事务。若当前存在事务,则新建一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交

  • PROPAGATION_NESTED

如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务,则新建一个事务,类似于REQUIRE_NEW

  • PROPAGATION_SUPPORTS

支持当前事务,若当前不存在事务,以非事务的方式执行

  • PROPAGATION_NOT_SUPPORTED

以非事务的方式执行,若当前存在事务,则把当前事务挂起

  • PROPAGATION_MANDATORY

强制事务执行,若当前不存在事务,则抛出异常

  • PROPAGATION_NEVER

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

  • 总结

Spring事务传播级别一般不需要定义,默认就是PROPAGATION_REQUIRED,除非在嵌套事务的情况下需要重点了解

Spring 事务实现方式

  • 编程式事务管理

这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护

  • 声明式事务管理

这种方式意味着你可以将事务管理和业务代码分离。你只需要通过注解或者XML
配置管理事务

Spring框架的事务管理有哪些优点

  • 它为不同的事务API(如JTA, JDBC, Hibernate, JPA, 和JDO)提供了统一的编程模型

  • 它为编程式事务管理提供了一个简单的API而非一系列复杂的事务API(如JTA)

  • 它支持声明式事务管理

  • 它可以和Spring 的多种数据访问技术很好的融合

事务三要素是什么?

  • 数据源
    表示具体的事务性资源,是事务的真正处理者,如MySQL等

  • 事务管理器
    像一个大管家,从整体上管理事务的处理过程,如打开、提交、回滚等

  • 事务应用和属性配置
    像一个标识符,表明哪些方法要参与事务,如何参与事务,以及一些相关属
    性如隔离级别、超时时间等

事务注解的本质是什么?

@Transactional 这个注解仅仅是一些(和事务相关的)元数据,在运行时被事务基础设施读取消费,并使用这些元数据来配置bean的事务行为。 大致来说具有两方面功能,一是表明该方法要参与事务,二是配置相关属性来定制事务的参与方式和运行行为

声明式事务主要是得益于Spring AOP。使用一个事务拦截器,在方法调用的前后/周围进行事务性增强(advice),来驱动事务完成

@Transactional注解既可以标注在类上,也可以标注在方法上。当在类上时,默认应用到类里的所有方法。如果此时方法上也标注了,则方法上的优先级高。 另外注意方法一定要是public的

猜你喜欢

转载自blog.csdn.net/weixin_47971206/article/details/125239737