开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 23 天,点击查看活动详情
SpringBoot 中事务的使用
事务是恢复和并发控制的基本单位,具有ACID特性。
声明式事务:注解@Transactional
对于使用了 @Transactional 注解的方法,如果执行出错,就会回滚整个函数方法。
-
作用于类:当把@Transactional 注解放在类上时,表示所有该类的public方法都配置相同的事务属性信息。
-
作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。
使用注解事务的粒度过大,如果只想对某一个代码块使用事务,则可以使用 TransactionTempale 来解决。
编程式事务:TransactionTempale
使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。TransactionCallback 包含如下方法。
Object dolnTransaction(TransactionStatus status) 。
该方法的方法体就是事务的执行体。
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResultl类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback 接口的子接口,该抽象类包含一个抽象方法:
void dolnTransactionWithoutResult(TransactionStatus status)
该方法与dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。
@Autowired
TransactionTemplate transactionTemplate;
transactionTemplate.execute(new TransactionCallback<Object>() {
@Override
public Object doInTransaction(TransactionStatus transactionStatus) {
//...
return Boolean.TRUE;
}
});
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
//...
}
});
如果你发现了文章出现了错误或有不足,欢迎在评论区和我交流,我看到了一定会回复。
写文章不易,如果你觉得文章对你有帮助,麻烦点一下点赞、收藏,你的支持是我写文章的最大动力!