interview
spring
Spring事务在什么情况下会失效?

Spring面试题, Spring 事务在什么情况下会失效?

Spring面试题, Spring 事务在什么情况下会失效?

QA

Step 1

Q:: Spring 事务在什么情况下会失效?

A:: Spring 事务在以下情况下会失效:1. 非 public 方法调用:Spring 事务只会在 public 方法上生效。2. 自调用:一个类中的方法调用同类中的另一个事务方法,事务不会生效。3. 异常未被捕获或未声明:事务只能捕获 RuntimeException 和 Error 类型的异常,其他类型的异常需要在事务方法上明确声明。4. 配置问题:如事务管理器没有正确配置。5. 多线程环境:事务管理在多线程环境下不安全。6. 数据源未设置为 transactional。

Step 2

Q:: 如何配置 Spring 事务?

A:: Spring 事务可以通过注解和 XML 配置两种方式实现。注解方式:在类或方法上使用 @Transactional 注解。XML 方式:在 Spring 配置文件中使用 <tx:advice> 和 <aop:config> 标签配置事务。

Step 3

Q:: Spring 事务传播行为有哪些?

A:: Spring 支持七种事务传播行为:1. REQUIRED:支持当前事务,如果没有则新建一个事务。2. SUPPORTS:支持当前事务,如果没有事务则以非事务方式执行。3. MANDATORY:支持当前事务,如果没有事务则抛出异常。4. REQUIRES_NEW:新建一个事务,如果当前存在事务则将其挂起。5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务则将其挂起。6. NEVER:以非事务方式执行,如果当前存在事务则抛出异常。7. NESTED:在当前事务内创建一个嵌套事务。

Step 4

Q:: Spring 事务隔离级别有哪些?

A:: Spring 支持五种事务隔离级别:1. DEFAULT:使用后端数据库的默认隔离级别。2. READ_UNCOMMITTED:允许读取未提交的数据,可能会导致脏读、不可重复读和幻读。3. READ_COMMITTED:只能读取已经提交的数据,防止脏读,但可能会出现不可重复读和幻读。4. REPEATABLE_READ:多次读取相同数据时,结果一致,防止脏读和不可重复读,但可能会出现幻读。5. SERIALIZABLE:完全串行化读,防止脏读、不可重复读和幻读,但性能较低。

用途

面试这些内容是因为 Spring 事务管理是企业级应用开发中非常重要的一部分,确保数据的一致性和完整性。在实际生产环境中,事务管理用于处理数据库操作时,保证数据操作的原子性、一致性、隔离性和持久性 `(ACID)`。特别是在处理复杂业务逻辑和多步骤事务操作时,正确配置和使用事务管理至关重要。\n

相关问题

🦆
Spring AOP 的原理是什么?

Spring AOP(Aspect-Oriented Programming,面向切面编程)通过动态代理技术实现,在运行时为目标对象生成代理对象,通过代理对象拦截方法调用,应用切面逻辑。Spring AOP 支持方法前、方法后、方法异常等多种切面类型。

🦆
Spring 的依赖注入DI是什么?

依赖注入是一种设计模式,用于将对象的依赖关系在外部进行注入,而不是在对象内部创建。Spring 通过构造函数注入、Setter 方法注入和字段注入三种方式实现依赖注入。

🦆
Spring Bean 的生命周期是什么?

Spring Bean 的生命周期包括:实例化、依赖注入、初始化、销毁四个阶段。可以通过 @PostConstruct 和 @PreDestroy 注解自定义初始化和销毁方法。

🦆
如何处理 Spring Boot 应用中的异常?

可以使用 @ControllerAdvice 和 @ExceptionHandler 注解处理 Spring Boot 应用中的全局异常。在 @ControllerAdvice 类中定义 @ExceptionHandler 方法,处理特定类型的异常并返回自定义响应。