springboot事务介绍
前言
这一篇博客主要介绍了spring的事务。
事务抽象的核心接口
不同的数据源事务都实现了PlatformTransactionManager, 比如:
数据库类型 | 数据库事务接口 |
---|---|
jdbc | DataSourceTransactionManager |
hibernate | HibernateTransactionManager |
jta | JtaTransactionManager |
事务的相关设置
通过TransactionDefinition接口来设置:
- Propagation 传播性
- Isolation 隔离性
- Timeout 超时
- Read-only status 只读状态
事物的传播特性
传播性 | 值 | 描述 |
---|---|---|
PROPAGATION_REQUIRED | 0 | 当前有事务就用当前的, 没有就用新的 |
PROPAGATION_SUPOORTS | 1 | 事务可有可无, 不是必须的 |
PROPAGATION_MANATORY | 2 | 当前一定要有事务, 不然就抛异常 |
PROPAGATION_REQUIRES_NEW | 3 | 无论是否有事务, 都起个新的事务 |
PROPAGATION_NOT_SUPPORTED | 4 | 不支持事务, 按非事务方式运行 |
PROPAGATION_NEVER | 5 | 不支持事务, 如果有事务则抛异常 |
PROPAGATION_NESTED | 6 | 当前有事务就在当前事务里再起一个新的事务 |
事务类型
- 编程式事务
- 声明式事务
编程式事务
通过代码的方式执行事务:
1 |
|
这里使用了TransactionTemplate的execute()方法, 接着我们在这个方法中执行了对数据库操作的代码, 并将事务的状态设置为只能回滚, 那么这个事务在执行之后依然不会对数据库进行操作。
声明式事务
通过注解或者xml的方式声明事务:
1 |
|
这里有三个方法都启动了事务, 其中第二个方法指定了如果抛出指定异常则回滚, 第三个方法虽然调用了第二方法, 但是并没有指定抛出异常后回滚, 所以还是会对数据库进行操作。
springboot事务介绍
http://icecreamzhao.github.io/back_skill_experience/java/spring/spring-family-meals/springboot-service-translation.html