@Transactional(rollbackFor)

简介: @Transactional注解有两个• 一个是spring提供的@org.springframework.transaction.annotation.Transactional• 另一个是jdk提供@javax.transaction.Transactional。

@Transactional注解有两个

  • 一个是spring提供的@org.springframework.transaction.annotation.Transactional
  • 另一个是jdk提供@javax.transaction.Transactional。

在回滚的设置上

  • spring提供的是rollbackFor
  • jdk提供的是rollbackOn

在使用方法上是一致的。

这两个注解在我有限的测试里表现是一样的。

用在哪里

@Transactional注解既可以写在方法上也可以写在类上。写在类上则这个类的所有public方法都将会有事务。这样显然会使一些不需要事务的方法产生事务,所以更好的做法是在想要添加事务的方法上标注@Transactional。

rollbackFor

@Transactional的rollbackFor用于指定能够触发事务回滚的异常类型,可以指定多个,用逗号分隔。

rollbackFor默认值为UncheckedException,包括了RuntimeException和Error.

当我们直接使用@Transactional不指定rollbackFor时,Exception及其子类都不会触发回滚。

public class BusinessException extends Exception {
    public BusinessException(String msg) {
        super(msg);
    }
}
@Autowired
    private UserRepository userRepository;
    // 不回滚
    @Transactional
    public void test1() throws Exception {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        saveUser(user);
        throw new Exception("test1 error");
    }
    // 不回滚
    @Transactional
    public void test11() throws Exception {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        saveUser(user);
        throw new BusinessException("test11 error");
    }
    // 回滚
    @Transactional(rollbackOn = Exception.class)
    public void test2() throws Exception {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        saveUser(user);
        throw new Exception("test2 error");
    }
    // 回滚
    @Transactional(rollbackOn = Exception.class)
    public void test21() throws Exception {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        saveUser(user);
        throw new BusinessException("test21 error");
    }
    // 回滚
    @Transactional
    public void test3() {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        saveUser(user);
        throw new RuntimeException("test3 runtime error");
    }
    // 不回滚
    @Transactional
    public void test4() throws Exception {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        test41(user);
        throw new Exception("test4 error");
    }
    @Transactional(rollbackOn = Exception.class)
    public void test41(User user) {
        saveUser(user);
    }
    // 不回滚
    public void test5() throws BusinessException {
        test6();
    }
    // 回滚
    @Transactional(rollbackOn = Exception.class)
    public void test6() throws BusinessException {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        saveUser(user);
        throw new BusinessException("test6 error");
    }
    // 回滚
    @Transactional(rollbackOn = Exception.class)
    public void test7() throws BusinessException {
        test8();
    }
    public void test8() throws BusinessException {
        User user = new User(1, "15000000000", "d243ewa", "Comma");
        saveUser(user);
        throw new BusinessException("test8 error");
    }
    public User saveUser(User user) {
        return userRepository.save(user);
    }
目录
相关文章
IDEA 出现问题:IDEA Shift+shift 万能搜索你也有失效的时候
IDEA 出现问题:IDEA Shift+shift 万能搜索你也有失效的时候
1202 0
IDEA 出现问题:IDEA Shift+shift 万能搜索你也有失效的时候
|
人工智能 API Python
Python 技术篇-有道翻译api接口调用详细讲解、实战演示,有道智云·AI开放平台
Python 技术篇-有道翻译api接口调用详细讲解、实战演示,有道智云·AI开放平台
3866 0
Python 技术篇-有道翻译api接口调用详细讲解、实战演示,有道智云·AI开放平台
|
4月前
|
数据采集 存储 C++
Python异步爬虫(aiohttp)加速微信公众号图片下载
Python异步爬虫(aiohttp)加速微信公众号图片下载
|
8月前
|
供应链 监控 安全
业务上云的主要安全风险及网络安全防护建议
业务上云面临数据泄露、配置错误、IAM风险、DDoS攻击、合规与审计、供应链及内部威胁等安全挑战。建议采取全生命周期加密、自动化配置检查、动态权限管理、流量清洗、合规性评估、供应链可信验证及操作审批等措施,构建“预防-检测-响应”一体化安全体系,确保数据保护、权限收敛、合规审计和弹性防护,保障云端业务安全稳定运行。
1148 2
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
905 0
|
物联网 智能硬件
智能家居系统入门:打造你的智能生活
想象一下,清晨的阳光和悠扬的音乐将你从甜美的梦乡中唤醒,窗帘自动缓缓拉开,咖啡机已经为你准备好了香浓的咖啡。这不是科幻电影的情节,而是智能家居带给我们的现实生活。本文将带你了解如何通过简单的步骤,将普通的家居环境转变为一个充满科技感的智能家庭。
298 27
|
Java Linux Shell
Linux后台运行jar程序
【7月更文挑战第23天】
378 1
|
分布式计算 Hadoop
Hadoop中NameNode故障
【7月更文挑战第11天】
400 3
|
监控 安全 Java
Spring Boot优雅Shutdown时异步线程安全优化
Spring Boot优雅Shutdown时异步线程安全优化
|
JSON Java 数据格式
Springboot自定义全局异常处理
BasicErrorController是Spring Boot中默认提供的用于处理基本错误的控制器。它实现了ErrorController接口,用于处理在应用程序中发生的错误,例如404 Not Found等。此种方式是通过请求转发实现的,出现异常时,会转发到请求到/error,该接口对异常进行处理返回,是最符合全局异常处理的。
280 2