Spring中@Transactional用法详细介绍

我来为您详细讲解Spring中@Transactional用法的攻略。

Spring中@Transactional用法详细介绍

一、什么是@Transactional

@EnableTransactionManagement注解:开启事务管理器。

@Transactional注解:在类或方法上标记该业务需要事务管理。

二、@Transactional的常用属性

1. propagation属性

事务传播行为:定义业务方法间的事务关系。

  • REQUIRED:默认值,外围方法创建了事务,则当前方法就在这个事务中共同协作。如果外围方法没有创建事务,则当前方法就自己创建一个新的事务。
  • SUPPORTS:外围方法创建了事务,则共同协作;否则当前方法就以非事务的方式运行。
  • REQUIRES_NEW:当前方法必须启动一个新的事务,并在自己的事务完成之后,将原有事务恢复继续执行。
  • NOT_SUPPORTED:当前方法不应该在外围方法的事务上执行。如果当前方法在外围方法的上下文中已经有了事务,那么不支持执行,要么当前方法取消事务运行,要么外围方法将事务结束。
  • MANDATORY:外围方法必须存在事务,否则会发生异常。
  • NEVER:当前方法不应该在外围方法的事务上执行。如果当前方法在外围方法的上下文中已经有了事务,则抛出异常。
  • NESTED:当前方法在外围方法的事务中以一个嵌套事务的形式运行。

2. isolation属性

事务隔离级别:定义事务可能遇到的问题类型。

  • DEFAULT:默认值,使用默认隔离级别。
  • READ_UNCOMMITTED:不允许脏读,允许dirty read。
  • READ_COMMITTED:允许不可重复读,不允许脏读。
  • REPEATABLE_READ:如果你在事务范围内读取过某一条记录,你再次读取时的结果,应该与之前读取时的结果一致。
  • SERIALIZABLE:最严格的隔离级别,通过强制事务排序来避免典型的并发问题。

3. timeout属性

事务超时时限:定义事务强制回滚之前,可以占用多长时间。

4. readOnly属性

是否是只读事务:只读事务可以带来更高的性能。

5. rollbackFor属性

当遇到异常时,需要回滚的异常类型。例:

@Transactional(rollbackFor = {RuntimeException.class})

6. noRollbackFor属性

当遇到异常时,不需要回滚的异常类型。

@Transactional(noRollbackFor = {NullPointerException.class})

三、示例

示例1:基本使用

@Service
@Transactional
public class UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void saveUser(User user) {
        userDao.saveUser(user);
    }
}

示例2:使用多个数据源

@Service
@Transactional(transactionManager = "transactionManager1")
public class UserService {

    @Autowired
    private UserDao userDao1;

    @Transactional(transactionManager = "transactionManager2")
    public void saveUser(User user) {
        userDao2.saveUser(user);
    }
}

以上就是Spring中@Transactional用法的详细介绍。希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring中@Transactional用法详细介绍 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • C#编程自学之开篇介绍

    C#编程自学之开篇介绍 本文将为大家介绍如何通过自学的方式学习C#编程语言。C#是一种面向对象的程序设计语言,它主要用于开发Windows桌面应用程序、Web应用程序、游戏、移动应用程序等应用领域。相信大家在学习C#编程过程中会遇到各种各样的问题,如何处理这些问题是自学过程中最关键的一点。 确定学习C#编程的目的和方向 在开始自学之前,首先需要明确自己想要学…

    Java 2023年5月23日
    00
  • 一文读懂Spring Bean的生命周期

    一文读懂Spring Bean的生命周期 Spring是一款非常流行的Java开发框架,支持面向对象编程、IOC和AOP等高级特性,而Spring Bean是其最基本的组成部分。本文将通过详细讲解Spring Bean的生命周期来帮助读者深入理解Spring框架的工作原理。 什么是Spring Bean? Spring Bean是Spring IoC容器中管…

    Java 2023年5月19日
    00
  • Java提取两个字符串中的相同元素方法

    当我们需要提取两个字符串中相同的元素时,可以采用以下两种方法: 方法一:利用Java集合框架的交集函数 Java集合框架提供了intersection函数可以方便的求出两个已知集合的交集,因此我们可以将两个字符串分别转化为字符数组,然后再转化为集合,最后求出它们的交集。 示例一: String str1 = "abcde"; String…

    Java 2023年5月27日
    00
  • 史上最全最强SpringMVC详细示例实战教程(图文)

    “史上最全最强SpringMVC详细示例实战教程(图文)”是一篇非常详细的SpringMVC教程,其中包含了众多实战示例,可以帮助初学者深入了解SpringMVC框架,掌握相关开发技术和实现方法。本文将详细讲解整篇教程的内容,包括主要内容、实现方法、示例说明等。 主要内容 “史上最全最强SpringMVC详细示例实战教程(图文)”主要涵盖以下内容: Spri…

    Java 2023年5月16日
    00
  • Spring Boot开启的2种方式详解

    SpringBoot开启的2种方式详解 SpringBoot是一种基于Spring框架的开发应用程序的工具,能够使开发者更加便捷地构建、部署和运行Web应用程序。在使用SpringBoot时,需要开启工程,下面介绍SpringBoot的两种开启方式。 方式一:使用Spring Boot Maven 插件快速启动工程 使用Spring Boot Maven插件…

    Java 2023年5月15日
    00
  • Spring框架实现AOP的两种方式详解

    Spring框架实现AOP的两种方式详解 Spring框架是JavaEE应用中最常用的框架之一,其中一个主要的特性就是支持AOP(面向切面编程)的实现。在Spring框架中,AOP有两种主要的实现方式:基于代理(Proxy-based)和基于AspectJ(AspectJ-based)。 基于代理的AOP实现方式 基于代理的AOP实现方式是Spring框架默…

    Java 2023年5月19日
    00
  • Spring Security OAuth过期的解决方法

    下面是针对“Spring Security OAuth过期的解决方法”的完整攻略: Spring Security OAuth过期的解决方法 问题描述 在使用Spring Security OAuth时,有可能会遇到令牌(expired_token)过期的问题,导致无法访问受保护的资源。这时需要找到一种解决办法。 解决方法 方法一:自定义TokenServi…

    Java 2023年5月20日
    00
  • Sprint Boot @Qualifier使用方法详解

    在Spring Boot中,@Qualifier注解用于指定依赖注入的具体实现类。本文将详细介绍@Qualifier注解的作用和使用方法,并提供两个示例。 @Qualifier注解的作用 在Spring Boot中,当存在多个实现类时,使用@Qualifier注解可以指定依赖注入的具体实现类。使用@Qualifier注解,可以避免依赖注入时出现歧义,确保注入…

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部