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

相关推荐
captain3766 小时前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
2601_962885728 小时前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
深蓝AI8 小时前
Python 3.13 的 Queue.shutdown:异步消费者终于能正常收工了
后端
武子康8 小时前
MultiNet6 空闲崩溃:`EXCVADDR=0x8` 后又出现 `CORRUPT HEAP`
人工智能·后端·agent
步行cgn8 小时前
Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用
java·spring·mvc
开开心心_Every8 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
萧瑟余晖9 小时前
Spring Batch核心模型与快速上手详解
java·spring·batch
武子康9 小时前
MultiNet7 每轮都 clean,ESP32-P4 内存为什么还在掉?
人工智能·后端·agent
超级架构师10 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
陈随易10 小时前
AI 运维服务器,安全又可靠的方法
前端·后端·程序员