rollback-only事务

前言

事务注解在进行时,抛出了异常

示例

UserService类上

less 复制代码
@Slf4j
@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;


    @Transactional(rollbackFor = Exception.class)
    public void say() {
        log.info("============执行say()==============");
        User user = new User();
        user.setUserName("aaa");
        userRepository.save(user);
        int a = 1 / 0;
    }

}
less 复制代码
@Slf4j
@Service
public class PersonService {

    @Autowired
    private UserService userService;

    @Transactional(rollbackFor = Exception.class)
    public void say() {
        log.info("PersonService say");
        try {
            userService.say();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

准备一个接口

less 复制代码
@Slf4j
@RestController
public class IndexController {


    @Autowired
    private PersonService personService;

    @GetMapping("/hello")
    public Integer hello() {
        personService.say();
        return 1;
    }
}

访问

bash 复制代码
http://ip:端口/hello

发现会抛事务异常,

原因是A方法又catch到B方法抛出的异常,但是A方法catch到异常后没有继续往上抛出,而是继续执行后面的代码,最后正常提交事务,那么就会抛出 Transaction rolled back because it has been marked as rollback-only这异常!(因为AB是用同一个事务,在B方法执行的时候这个事务就标记为rollback-only,然后A方法继续使用该事务,然后又执行事务提交的操作,所以最后会抛异常)

相关推荐
Jiude2 分钟前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
仰望星空@脚踏实地15 分钟前
Spring Boot Web 服务单元测试设计指南
spring boot·后端·单元测试
程序猿小D22 分钟前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站
羊小猪~~27 分钟前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
用户83249514173234 分钟前
JAVA 版本多版本切换 - 傻瓜式操作工具
后端
estarlee37 分钟前
随机昵称网名API接口教程:轻松获取百万创意昵称库
后端
明天好,会的41 分钟前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
追逐时光者1 小时前
C#/.NET/.NET Core优秀项目和框架2025年6月简报
后端·.net
CodeWithMe1 小时前
【Note】《深入理解Linux内核》 Chapter 15 :深入理解 Linux 页缓存
linux·spring·缓存
一勺菠萝丶2 小时前
Spring Boot + MyBatis/MyBatis Plus:XML中循环处理List参数的终极指南
xml·spring boot·mybatis