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:完全串行化读,防止脏读、不可重复读和幻读,但性能较低。