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

相关推荐
梁凌锐28 分钟前
重构手法——代码健壮性增强类 | 防御性编程 | 引入特殊情况类
后端
蒋蜀黍35 分钟前
Go + open ai 实现一个 mini manus
后端
及丫丫37 分钟前
SpringBoot集成MQTT客户端
后端
米粉030540 分钟前
SpringBoot+Vue+MySQL全栈开发实战:前后端接口对接与数据存储详解
vue.js·spring boot·mysql
用户289881806664241 分钟前
Sarama消费组初始化阻塞问题排查
后端·go
迢迢星万里灬41 分钟前
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
java·spring boot·spring·mybatis·spring mvc·面试指南
肥仔哥哥193041 分钟前
最新SpringBoot+SpringCloud+Nacos微服务框架分享
spring boot·spring cloud·微服务·nacos微服务·最新nacos微服务
Java中文社群42 分钟前
超实用!手把手教你Dify版本升级
人工智能·后端
大码猴43 分钟前
是时候该用自动化工具玩玩12306了
前端·javascript·后端
Java水解44 分钟前
MySQL如何开启远程访问权限
后端·mysql