ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot 之 事务管理

2022-08-17 11:03:16  阅读:185  来源: 互联网

标签:事务管理 回滚 SpringBoot insert Transactional 异常 po mapper


  我们在开发企业应用时,由于数据操作在顺序执行的过程中,线上可能有各种无法预知的问题,任何一步操作都有可能发生异常,异常则会导致后续的操作无法完成。此时由于业务逻辑并未正确的完成,所以在之前操作过数据库的动作并不可靠,需要在这种情况下进行数据的回滚。

注解 一般是在业务层实现类上或者其方法上假@transactional注解

  SpringBoot默认有限选择CGL IB代理 如果想切换JDK代理也可以

 

 

   SpringBoot中配置了自动注解注入 不需要自己开启事务

实现1

@Service
public class FilmInfoServiceImpl implements IFilmInfoService {
   @Resource
    private FilmInfoMapper mapper;

    @Transactional
    @Override
    public int insert(FilminfoPO po) {
        //这里有异常的话就会回滚
        return mapper.insert(po);
    }

  Spring Boot 默认的事务规则是遇到运行异常(RuntimeException)和程序 错误(Error)才会回滚。

   针对非运行时异常,如果要进行事务回滚的话,可以在 @Transactional 注解中使用 rollbackFor 属性来指定异常,比如 @Transactional(rollbackFor = Exception.class) ,这样就没有问题了,所以在实际项目中,一定要指定异常。

 @Transactional(rollbackFor = Exception.class)
    @Override
    public void insert(FilminfoPO po) throws SQLException {
        // 手动抛出异常
        mapper.insert(po);
        throw new SQLException("数据库异常");
    }

如果异常在方法中被捕获 导致异常回滚失败  被try catch掉了 会认为没有异常 那么就会插入了 所以就不要在这里捕获 向上抛出异常

 

在调用该 service 的地方加锁,保证锁 的范围比事务的范围大即可

    @Transactional(rollbackFor = Exception.class)
    @Override
    public synchronized void insert(FilminfoPO po) throws SQLException {
        // 手动抛出异常
        mapper.insert(po);
     
    }

 

标签:事务管理,回滚,SpringBoot,insert,Transactional,异常,po,mapper
来源: https://www.cnblogs.com/ziwang520/p/16594272.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有