什么事Spring的事务抽象
Spring的事务抽象
一致性事务模型
- JDBC/Hibernate/MyBatis
- DataSource/JTA
事务抽象的核心接口
PlatformTransactionManager
- DataSourceTransactionManager
- HibernateTransactionManager
- JtaTransactionManager
TransactionDefinition
- Propagation
- lslation
- Timeout
- Read-only status
事务的传播特性
传播性 | 值 | 描述 |
---|---|---|
PROPAGTION_REQUIRED | 0 | 当前有事务就用当前的,没有就用新的 |
PROPAGATION_SUPPORTS | 1 | 事务可与可无,不是必须的 |
PROPAGATION_MANDARORY | 2 | 当前一定要有事务,不然抛异常 |
PROPAGATION_REQUIRES_NEW | 3 | 无论是否有事务,都起一个新事务 |
PROPAGATION_NOT_SUPPORTED | 4 | 不支持事务,按非事务方式运行 |
PROPAGATION_NEVER | 5 | 不支持事务,如果有事务则抛异常 |
PROPAGATION_NESTED | 6 | 当前事务就在当前事务里再起一个事务 |
事务隔离特性
隔离性 | 值 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|---|
ISOLATION_READ_UNCOMMITTED | 1 | √ | √ | √ |
ISOLATION_READ_COMMITTED | 2 | x | √ | √ |
ISOLATION_REPEATABLE_READ | 3 | x | x | √ |
ISOLATION_SERLALIZABLE | 4 | x | x | x |
编程式事务
TransactionTemplate
- TransactionCallback 有返回值
- TransactionCallbackWithoutResult 没有返回值
PlatformTransactionManager
- 可以传入TransactionDefinition进行定义
声明式事务
基于注解的配置的配置方式
开启事务注解的方式
- @EnableTransactionManagement
一些配置
- proxyTargetClass
- mode
- order
@Transaction
- TransactionManager
- propagation
- isolation
- timeout
- readOnly
- 怎么判断回滚
docker