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方法继续使用该事务,然后又执行事务提交的操作,所以最后会抛异常)

相关推荐
oouy14 分钟前
Java的三大特性:从懵圈到通透的实战指南
后端
q***064723 分钟前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
狂炫冰美式42 分钟前
3天,1人,从0到付费产品:AI时代个人开发者的生存指南
前端·人工智能·后端
q***649744 分钟前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
Java水解1 小时前
PostgreSQL 自增序列SERIAL:从原理到实战
后端·postgresql
悟空码字2 小时前
单点登录:一次登录,全网通行
java·后端
倚肆2 小时前
Spring Boot Security 全面详解与实战指南
java·spring boot·后端
bin91532 小时前
幻境寻踪:Rokid AR眼镜上的沉浸式解谜冒险游戏开发实战
后端·ar·restful·沉浸式体验·ar游戏开发·rokid眼镜·解谜游戏
8***f3952 小时前
工作中常用springboot启动后执行的方法
java·spring boot·后端
Cisyam2 小时前
openGauss + LangChain Agent实战:从自然语言到SQL的智能数据分析助手
后端