基础知识

文章目录
  1. 1. spring事务
  2. 2. spring事务传播属性
  3. 3. 数据库事务隔离级别
  4. 4. spring事务隔离级别
  5. 5. 参考
spring事务

spring关于事务提供了两种编程模型,注解和接口编程。

基于注解:① xml文件开启注解驱动,相关类和方法上通过@Transactional注解标识。② spring在启动是会为这些class生成spring内部管理的bean,若是发现带有@Transactional注解的类和方法,会为其生成代理类,代理类中会做相关的事物处理(正常提交,异常回滚)。



基于接口:需要实现TransactionCallback接口。



spring事务传播属性
常量名称 常量解释
PROPAGATION_REQUIRED(propagation_required) 支持当前事物,如果当前没有事物,就新建一个事物。这是最常见的选择,也是spring默认的事物传播。
PROPAGATION_REQUIRES_NEW(propagation_requires_new) 新建事物,如果当前存在事物,就把当前事物挂起。新建的事物和挂起的事物没有任何的关系,是两个独立的事物。外层事物失败回滚之后,不能回滚内层事物执行的结果。内层事物失败抛出异常,外层事物捕获,也可以不处理回滚操作。
PROPAGATION_SUPPORTS(propagation_supports) 支持当前事物,如果当前没有事物,就以非事物的方式执行。
PROPAGATION_MANDATORY(propagation_mandatory) 支持当前事物,如果当前没有事物,就抛出异常。
PROPAGATION_NOT_SUPPORTED(propagation_not_supported) 以非事物方式执行操作,如果当前存在事物,就把当前事物挂起。
PROPAGATION_NEVER(propagation_never) 以非事物方式执行操作,如果当前存在事物,就抛出异常。
PROPAGATION_NESTED(propagation_nested) 如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。
数据库事务隔离级别
隔离级别 隔离级别的值 导致的问题
Read Uncommited 0 允许脏读,不可重复读,幻读
Read Commited 1 避免脏读,允许不可重复读和幻读
RepeatableRead 2 避免脏读和不可重复读,允许幻读
Serializable 3 避免脏读 ,不可重复读,幻读,事物一个一个执行,执行效率低
spring事务隔离级别
常量名称 常量解释
ISOLATION_DEFAULT(isolation_default) PlatfromTransactionManager默认的事物隔离级别,使用数据库默认的事物隔离级别。
ISOLATION_READ_UNCOMMITTED(isolation_read_uncommitted) 读未提交
ISOLATION_READ_COMMITTED(isolation_read_committed) 读已提交
ISOLATION_REPEATABLE_READ(isolation_repeatable) 可重复读
ISOLATION_SERIALIZABLE(isolation_serializable) 串行化
参考

深入了解spring事务原理

Restful风格

一致性hash