定义:
要么全部执行成功, 要么撤销不执行
事务管理方式:
声明式事务管理建立在 AOP 之上的其本质是对方法前后进行拦截, 然后在目标方法开始之前创建或者加入一个事务, 在执行完目标方法之后根据执行情况提交或者回滚事务声明式事务最大的优点就是不需要通过编程的方式管理事务, 这样就不需要在业务逻辑代码中掺杂事务管理的代码, 只需在配置文件中做相关的事务规则声明 (或通过基于 @Transactional 注解的方式), 便可以将事务规则应用到业务逻辑中
事务传播行为:
所谓事务的传播行为是指, 如果在开始当前事务之前, 一个事务上下文已经存在, 此时有若干选项可以指定一个事务性方法的执行行为在 TransactionDefinition 定义中包括了如下几个表示传播行为的常量:
TransactionDefinition.PROPAGATION_REQUIRED: 如果当前存在事务, 则加入该事务; 如果当前没有事务, 则创建一个新的事务这是默认值
TransactionDefinition.PROPAGATION_REQUIRES_NEW: 创建一个新的事务, 如果当前存在事务, 则把当前事务挂起
TransactionDefinition.PROPAGATION_SUPPORTS: 如果当前存在事务, 则加入该事务; 如果当前没有事务, 则以非事务的方式继续运行
TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事务方式运行, 如果当前存在事务, 则把当前事务挂起
TransactionDefinition.PROPAGATION_NEVER: 以非事务方式运行, 如果当前存在事务, 则抛出异常
TransactionDefinition.PROPAGATION_MANDATORY: 如果当前存在事务, 则加入该事务; 如果当前没有事务, 则抛出异常
TransactionDefinition.PROPAGATION_NESTED: 如果当前存在事务, 则创建一个事务作为当前事务的嵌套事务来运行; 如果当前没有事务, 则该取值等价于 TransactionDefinition.PROPAGATION_REQUIRED
事务隔离级别:
隔离级别是指若干个并发的事务之间的隔离程度 TransactionDefinition 接口中定义了五个表示隔离级别的常量:
TransactionDefinition.ISOLATION_DEFAULT: 这是默认值, 表示使用底层数据库的默认隔离级别对大部分数据库而言, 通常这值就是 TransactionDefinition.ISOLATION_READ_COMMITTED
TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据该级别不能防止脏读, 不可重复读和幻读, 因此很少使用该隔离级别比如 PostgreSQL 实际上并没有此级别
TransactionDefinition.ISOLATION_READ_COMMITTED: 该隔离级别表示一个事务只能读取另一个事务已经提交的数据该级别可以防止脏读, 这也是大多数情况下的推荐值
TransactionDefinition.ISOLATION_REPEATABLE_READ: 该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询, 并且每次返回的记录都相同该级别可以防止脏读和不可重复读
TransactionDefinition.ISOLATION_SERIALIZABLE: 所有的事务依次逐个执行, 这样事务之间就完全不可能产生干扰, 也就是说, 该级别可以防止脏读不可重复读以及幻读但是这将严重影响程序的性能通常情况下也不会用到该级别
脏读 | 不可重复读 | 幻读 | |
READ_UNCOMMITTED | √ | √ | √ |
READ_COMMITTED | × | √ | √ |
REPEATABLE_READ | × | × | √ |
SERIALIZABLE | × | × | × |
参考:
https://www.cnblogs.com/yepei/p/4716112.html
来源: http://www.bubuko.com/infodetail-2512481.html