Spring-4.Spring 事务

4 篇文章 0 订阅

Spring事务的使用

@Transactional
public void test(){}

使用@Transactional注解在方法上,即可使得方法以事务的形式运行,当发生UnChecked的错误时,就会回滚。注意,如果能够被try不过的异常时不会回滚事务的,可以通过roolbackFor指定异常,捕获后回滚,或者使用
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();手动设置回滚

@Transactional(rollbackFor = RuntimeException.class)
public void test(){
    try{
        ...
    }
    catch(Exception e){
        //手动回滚
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
}
  • 多数据原事务
    如果存在多个数据原,可以通过指定Transactional的Value指定数据原
    @Bean(name = "order")
    public DataSourceTransactionManager order(){
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean(name = "account")
    public DataSourceTransactionManager account(){
        return new DataSourceTransactionManager(dataSource());
    }
public class TransactionalService {

    @Transactional("order")
    public void setSomething(String name) { ... }

    @Transactional("account")
    public void doSomething() { ... }
}

隔离级别

spring的隔离级别比InnoDB的隔离级别多了一个:default,就是使用数据库的隔离级别。

  • TransactionDefinition.ISOLATION_DEFAULT:默认,使用数据库的隔离级别。
  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED:读未提交
  • TransactionDefinition.ISOLATION_READ_COMMITTED:读已提交
  • TransactionDefinition.ISOLATION_REPEATABLE_READ:可重复读
  • TransactionDefinition.ISOLATION_SERIALIZABLE:串行执行

七种传播机制

  • PROPAGATION_REQUIRES:如果已有事务,就在事务中运行,否则新建一个事务
  • PROPAGATION_SUPPORTS::如果已有事务,就在事务中运行,如果没有事务,则以非事务执行。
  • PROPAGATION_MANDATORY:如果已有事务,就在事务中运行,否则抛出异常
  • PROPAGATION_REQUIRES_NEW:如果已有事务,则挂起当前事务,否则新建事务
  • PROPAGATION_NESTED:如果已经有事务,则嵌套一个事务(单独回滚或提交),否则开始新的事务
  • PROPAGATION_NOT_SUPPORTED:非事务方式执行,如果有事务,则挂起当前事务
  • PROPAGATION_NEVER:非事务方式执行,如果有事务,则抛出异常

分布式事务

分布式事务,是指事务在多个数据源上,要保证多个数据源上得事务,可以使用Atomikos 。参考:SpringBoot Atomikos 多数据源分布式事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值