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日

相关文章

  • 深入讲解PHP的Yii框架中的属性(Property)

    来讲解一下“深入讲解PHP的Yii框架中的属性(Property)”的攻略。 简介 首先,我们来了解一下什么是Yii框架的属性(Property)。在Yii框架中,属性是类的重要组成部分。一个类的属性是指该类所包含的数据成员,它们用于存储对象的状态和构成对象的基本结构之一。在Yii框架中,属性通常需要在类声明中通过关键字声明,这些属性可以用来保存实例化对象的…

    Java 2023年6月15日
    00
  • Java代码为例讲解堆的性质和基本操作以及排序方法

    Java代码为例讲解堆的性质和基本操作以及排序方法 什么是堆? 堆(Heap)是一种基于二叉树的数据结构,常用于排序和优先级队列中。堆又分为大根堆和小根堆,大根堆满足任意节点的值都不大于其父节点的值,小根堆则相反。这里我们以大根堆为例。 堆的基本操作 插入元素 堆的插入操作是往堆中添加新值并保证堆的性质不变。具体实现如下: public void inser…

    Java 2023年5月26日
    00
  • Java Apache Commons报错“SAXNotSupportedException”的原因与解决方法

    “SAXNotSupportedException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 不支持的SAX特性:如果SAX特性不受支持,则可能会出现此错误。在这种情况下,需要检查SAX特性以解决此问题。 不支持的SAX属性:如果SAX属性不受支持,则可能会出现此错误。在这种情况下,需要检查SAX属性以解决此问题。 …

    Java 2023年5月5日
    00
  • JSP入门教程(1)

    下面是“JSP入门教程(1)”的完整攻略: 1. 概述 本教程将介绍JSP(Java Server Pages)的入门知识。JSP是Java Web应用程序中最常用的技术之一,它可以在服务器端动态生成HTML页面,使得Web应用程序更加灵活和动态化。如果你是初学者,本教程将帮助你快速入门JSP,在项目中使用JSP开发Web应用程序。 2. 前提条件 在学习本…

    Java 2023年6月15日
    00
  • JDBC实现数据库增删改查功能

    下面是关于JDBC实现数据库增删改查功能的详细攻略。 1. 前置知识 在学习JDBC之前,需要先掌握以下知识: Java基础知识 SQL语言基础知识 数据库基础知识 2. JDBC简介 Java Database Connectivity (JDBC) 是Java语言操作数据库的标准接口,它提供了一组不依赖于特定数据库管理系统的通用API,使得我们能够通过J…

    Java 2023年5月20日
    00
  • Java获得一个数组的指定长度排列组合算法示例

    下面详细讲解一下Java获得一个数组的指定长度排列组合算法示例的完整攻略。 算法说明 在程序设计中,经常会遇到需要从给定的元素集合中去选取一些元素,这些元素能组成的各种可能长度的排列和组合集合。这时候,排列和组合问题就变得特别重要。在Java中,提供了一些工具类帮助我们解决这些问题。 排列和组合的定义 排列问题中,给定n个元素,从中选取k个元素进行排列,若n…

    Java 2023年5月26日
    00
  • Java中使用JavaScript脚本的方法步骤

    在Java中使用JavaScript脚本的方法步骤大致如下: 导入JavaScript引擎 Java 8及以后版本使用Nashorn引擎(已废弃): “`java import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; ScriptEngineManager fa…

    Java 2023年5月26日
    00
  • 如何使用并发集合?

    如何使用并发集合? 在开发中,我们常遇到多个线程同时使用共享数据的情况,这时我们需要使用并发集合来确保线程安全。Java并发集合提供了线程安全的工具类,我们可以在多线程环境下使用这些工具类来保证线程安全。Java中有多种并发集合可以使用,如ConcurrentHashMap、ConcurrentSkipListMap、CopyOnWriteArrayList…

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