建议先关注、点赞、收藏后再阅读。
Spring事务的三大接口分别是:
- PlatformTransactionManager(平台事务管理器): 它是Spring事务管理的核心接口,定义了事务管理的一些基本操作,如开启事务、提交事务、回滚事务等。它是实际事务管理器(如JDBC事务管理器、JTA事务管理器等)的统一入口,并为上层的业务逻辑屏蔽了不同事务管理器的实现细节。
- TransactionDefinition(事务定义): 它用于定义事务的一些属性,如隔离级别、传播行为、超时时间等。通过TransactionDefinition,我们可以配置事务的一些特性,以满足不同场景下的需求。Spring提供了多种TransactionDefinition的实现类,如DefaultTransactionDefinition、AnnotationTransactionDefinition等。
- TransactionStatus(事务状态): 它表示了一个具体的事务的状态信息。在进行事务操作时,我们可以通过TransactionStatus获取当前事务的一些状态信息,如是否已经完成、是否已经回滚等。它主要用于监控或控制事务的执行过程,如在事务执行时检查并判断是否需要回滚事务。
事务隔离级别是数据库管理系统确保事务之间相互隔离、互不干扰的一种机制。
Spring框架提供了五个事务隔离级别,分别为:
- DEFAULT(默认): 使用数据库的默认隔离级别。通常为数据库的级别,默认为READ_COMMITTED。
- READ_UNCOMMITTED(读未提交): 这是最低的隔离级别,在该级别下,一个事务可以读取另一个事务尚未提交的数据。该级别存在脏读(Dirty Read)的问题,即一个事务读取到了另一个事务未提交的数据,可能导致不一致性。
- READ_COMMITTED(读已提交): 在该隔离级别下,一个事务只能读取到已经提交的数据。可以避免脏读问题,但存在不可重复读(Non-repeatable Read)和幻读(Phantom Read)问题。不可重复读指的是在同一个事务内,读取到的数据不一致;幻读指的是在同一个事务内,一个查询操作返回了不同数量的数据行。
- REPEATABLE_READ(可重复读): 在该隔离级别下,保证了在同一个事务内,多次读取同样的数据结果是一致的。可以避免不可重复读问题,但存在幻读问题。在该级别下,读取到的是一个快照,即使其他事务更新了数据,当前事务仍然读取到的是之前的数据。
- SERIALIZABLE(串行化): 这是最高的隔离级别,保证了事务之间的完全隔离。在该级别下,所有的事务串行执行,可以避免幻读问题,但会牺牲性能。
不同的事务隔离级别,根据是否允许脏读、不可重复读和幻读,以及性能的要求,选择合适的级别来保证事务的正确性和性能。在实际使用中,可以根据具体的业务场景来选择适当的隔离级别。