Spring事务细节【回滚设置】:rollbackFor + noRollbackFor

概念:
rollbackFor :哪些异常需要回滚
noRollbackFor :哪些异常可以不回滚

异常分类:

在这里插入图片描述


运行时异常(RuntimeException):默认都回滚。 int a=1/0
编译时异常(RuntimeException以外的异常):默认不回滚。 throw IOException
注:
在@Transactional注解中如果不配置rollbackFor属性,那么事务只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事务在遇到非运行时异常时也回滚
测试代码(不涉及传播行为)
1. noRollbackFor :让运行时异常抛出时不回滚

@Transactional(noRollbackFor = {ArithmeticException.class})
public void changeNum(){
    testAMapper.addNumA();    
    int a = 1/0;  //运行时异常,正常会导致回滚;noRollbackFor 加上后不回滚,使得test_a表的a:10-->11,test_b表的b依旧是10
    testBMapper.descNumB();
}

2. 运行时异常被try-catch,noRollbackFor 不起作用,事务正常进行

@Transactional(noRollbackFor = {ArithmeticException.class})
public void changeNum(){
    testAMapper.addNumA();  //a:10-->11
    try {
        int a = 1/0;
    }
    catch (Exception e){}
    testBMapper.descNumB();  //b:10-->9


3. rollbackFor:让编译型异常抛出时也能回滚事务
不加rollbackFor :

@Transactional()
public void changeNum() throws FileNotFoundException {
    testAMapper.addNumA();    //a:10-->11  非运行时异常,默认不回滚
    new FileInputStream("E://a.txt");
    testBMapper.descNumB();  //b:10-->10
}

加rollbackFor :

@Transactional(rollbackFor = {FileNotFoundException.class})
public void changeNum() throws FileNotFoundException {
    testAMapper.addNumA();   //a:10-->10
    new FileInputStream("E://a.txt");
    testBMapper.descNumB();  //b:10-->10
}

4. 非运行时异常被try-catch,rollbackFor 不起作用,事务正常进行

@Transactional(rollbackFor = {FileNotFoundException.class})
public void changeNum()  {
    testAMapper.addNumA();  //a:10-->11
    try {
        new FileInputStream("E://a.txt");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    testBMapper.descNumB();  //b:10-->9
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring的数据库事务处理主要涉及以下几个方面的细节: 1. 事务的声明方式 Spring提供了多种事务声明方式,包括注解、XML配置和编程式事务管理等。其中,注解方式最为常用,可以通过在方法上添加@Transactional注解来声明事务。XML配置方式和编程式事务管理方式则需要在配置文件或代码中明确指定事务的属性和行为。 2. 事务的传播行为 Spring事务支持多种传播行为,包括REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED等。其中,REQUIRED是默认的传播行为,表示如果当前已经存在事务,则加入该事务,否则创建一个新的事务。其他传播行为则根据不同的需求来选择使用。 3. 事务的隔离级别 Spring事务支持多种隔离级别,包括DEFAULT、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE等。其中,DEFAULT表示使用数据库默认的隔离级别,而其他隔离级别则根据不同的需求来选择使用。 4. 事务的超时时间 Spring事务支持设置超时时间,用于控制事务执行的最长时间。如果事务在超时时间内未能完成,则将自动回滚事务。 5. 事务回滚规则 Spring事务支持设置回滚规则,用于控制哪些异常会触发事务回滚。可以通过在@Transactional注解中指定rollbackFor或noRollbackFor属性来定义回滚规则。 6. 事务的异常处理 Spring事务支持对事务异常进行处理,包括回滚事务、记录日志、抛出异常等。可以通过在@Transactional注解中指定异常处理类或方法来完成异常处理。 综上所述,Spring的数据库事务处理包括事务的声明方式、传播行为、隔离级别、超时时间、回滚规则和异常处理等细节,开发人员需要根据实际需求进行合理的配置和使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值