SpringBoot使用笔记(二)

Spring事务

事务传播特性

名称说明
PROPAGATION_REQUIRED默认的spring事务传播级别,如果上下文中已经存在事务,就加入到事务中执行,否则新建事务执行。
PROPAGATION_SUPPORTS不关心有没有事务,如果上下文存在事务,则支持事务加入事务,否则以非事务的方式执行。
PROPAGATION_MANDATORY必须运行在一个事务中,如果当前没有事务正在发生,将抛出异常。
PROPAGATION_REQUIRES_NEW当前方法必须在它自己的事务里运行。每次都会新建一个事务,并且同时将上下文中的事务挂起,当前新建事务完成后,上下文事务再恢复执行。
PROPAGATION_NOT_SUPPORTED不支持在事务中运行。如果存在事务则将其挂起,当前逻辑执行完后在恢复事务运行。
PROPAGATION_NEVER不能在事务中运行,如果当前有事务正在发生,则会抛出异常。
PROPAGATION_NESTED如果上下文中存在事务,则嵌套事务执行,嵌套的事务可以独立于封装事务进行提交或回滚;如果不存在事务,则新建事务。

事务隔离级别

名称说明
ISOLATION_DEFAULT使用数据库的默认隔离级别
ISOLATION_READ_UNCOMMITTED未提交读
ISOLATION_READ_COMMITTED提交读
ISOLATION_REPEATABLE_READ可重复读
ISOLATION_SERIALIZABLE串行化

SpringBoot中事务的简单实现

方法一:@Transactional 注解
使用 @Transactional 注解声明方法的事务特性,可配置 propagation 等参数实现事务的管理。

@Transactional
public void tran() {
	tranA();
	tranB();
}

@Transactional(propagation=Propagation.SUPPORTS)
tranA();

@Transactional(propagation=Propagation.NESTED)
tranB();

方法二:TransactionTemplate
用自动配置的 TransactionTemplate,执行 execute 方法,并将需要在事务中执行的动作在 doInTransaction 方法中,即可实现事务。同时,可使用 transactionTemplate.setPropagationBehavior() 和 transactionTemplate.setIsolationLevel() 来设置事务传播特性和隔离级别。

@Autowired
TransactionTemplate transactionTemplate;

public void transactionExample() {
	log.info("count in table example: {}", exampleRepository.count());
    transactionTemplate.execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
            exampleRepository.save(new Example());
            log.info("count in table example: {}", exampleRepository.count());
            transactionStatus.setRollbackOnly();
        }
    });
    log.info("count in table example: {}", exampleRepository.count());
}
/*
当 exampleRepository 初始为空时,日志输出:
count in table example: 0
count in table example: 1
count in table example: 0
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值