当前位置:首页 > 科技  > 软件

Transactional 在 Spring Boot 中的优秀实践

来源: 责编: 时间:2023-09-22 20:12:09 387观看
导读在开发应用程序时,保证数据的完整性和一致性是非常重要的。而对于复杂的业务逻辑来说,事务管理成为了一个必不可少的组件。在 Spring Boot 中,我们有强大的事务管理机制,可以帮助我们简化事务的处理并确保数据的正确性。

在开发应用程序时,保证数据的完整性和一致性是非常重要的。而对于复杂的业务逻辑来说,事务管理成为了一个必不可少的组件。在 Spring Boot 中,我们有强大的事务管理机制,可以帮助我们简化事务的处理并确保数据的正确性。本文将介绍在 Spring Boot 中使用事务的最佳实践。fC428资讯网——每日最新资讯28at.com

fC428资讯网——每日最新资讯28at.com

1.了解 Spring Boot 中的事务管理

Spring Boot 提供了方便的注解驱动的事务管理功能。通过使用 `@Transactional` 注解,我们可以将方法或类标记为事务性的,并由 Spring Boot 自动管理这些事务的生命周期。fC428资讯网——每日最新资讯28at.com

2. TransactionManager 的作用

TransactionManager 在事务管理中扮演着关键角色。当调用使用 `@Transactional` 注解的方法时,Spring Boot 利用 TransactionManager 来创建或加入事务,并根据操作结果提交或回滚事务。fC428资讯网——每日最新资讯28at.com

3. 事务隔离级别

Spring Boot 支持多种事务隔离级别,如 READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ 和 SERIALIZABLE。选择适当的事务隔离级别非常重要,它决定了事务之间以及底层数据之间的交互方式。fC428资讯网——每日最新资讯28at.com

@Transactional(isolation = Isolation.READ_COMMITTED)public void someTransactionalMethod() {    // ...}

4. 了解事务传播机制

事务传播定义了当一个事务方法调用另一个事务方法时,事务是如何传播的。Spring Boot 支持多种传播行为,如 REQUIRED、REQUIRES_NEW、SUPPORTS、NOT_SUPPORTED 等。根据业务需求选择合适的传播行为非常重要。fC428资讯网——每日最新资讯28at.com

以下是几个常见的事务传播机制示例:fC428资讯网——每日最新资讯28at.com

  1. REQUIRED:如果当前没有事务,则创建一个新的事务;如果已经存在事务,则加入到当前事务中。这是默认的事务传播机制。
@Transactional(propagation = Propagation.REQUIRED)public void methodA() {    // ... some code here    methodB();    // ... some code here}@Transactional(propagation = Propagation.REQUIRED)public void methodB() {    // ... some code here}

在上述示例中,当 methodA() 调用 methodB() 时,methodB() 将加入到 methodA() 的事务中。fC428资讯网——每日最新资讯28at.com

  1. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务,并挂起当前事务。
@Transactional(propagation = Propagation.REQUIRED)public void methodA() {    // ... some code here    methodB();    // ... some code here}@Transactional(propagation = Propagation.REQUIRES_NEW)public void methodB() {    // ... some code here}

在上述示例中,当 methodA() 调用 methodB() 时,methodB() 将启动一个新的事务,并暂停 methodA() 的事务。fC428资讯网——每日最新资讯28at.com

  1. SUPPORTS:如果当前存在事务,则加入到当前事务中;如果没有事务,则以非事务方式执行。
@Transactional(propagation = Propagation.REQUIRED)public void methodA() {    // ... some code here    methodB();    // ... some code here}@Transactional(propagation = Propagation.SUPPORTS)public void methodB() {    // ... some code here}

在上述示例中,当 methodA() 调用 methodB() 时,methodB() 将以与 methodA() 相同的事务状态执行。fC428资讯网——每日最新资讯28at.com

  1. NOT_SUPPORTED:表示当前方法在非事务环境下执行,即使存在一个活动的事务也会被挂起。
@Transactional(propagation = Propagation.REQUIRED)public void methodA() {    // ... some code here    methodB();    // ... some code here}@Transactional(propagation = Propagation.NOT_SUPPORTED)public void methodB() {    // ... some code here}

在上述示例中,当 methodA() 调用 methodB() 时,methodB() 将以非事务方式执行,即使 methodA() 执行在一个事务中。fC428资讯网——每日最新资讯28at.com

5. 处理同一类内的事务

当在同一类中的 `@Transactional` 方法调用另一个 `@Transactional` 方法时,需要注意 Spring 的默认行为。默认情况下,如果一个 `@Transactional` 方法在同一类中调用另一个 `@Transactional` 方法,则不会应用事务行为。为了解决这个问题,可以考虑使用基于 AspectJ 的编织或将 `@Transactional` 方法移动到单独的类中。fC428资讯网——每日最新资讯28at.com

6. 默认事务行为

Spring Boot 中的 `@Transactional` 方法在任何未检查异常发生时都会回滚事务。这样可以确保在发生错误时,事务中的数据更改不会被持久化。fC428资讯网——每日最新资讯28at.com

7. 管理不同 Bean 之间的事务

当调用另一个 Bean 上的方法时,Spring 会在目标 Bean 周围创建一个新代理,从而使其能够管理事务行为。这样可以确保跨 Bean 的方法调用也能参与到事务管理中。fC428资讯网——每日最新资讯28at.com

8. 处理未检查的异常

当 `@Transactional` 方法抛出未检查异常时,默认情况下 Spring 会自动回滚事务。这样可以确保在发生错误时,事务中的数据更改不会被持久化。fC428资讯网——每日最新资讯28at.com

9. 自定义回滚行为

通过使用 `@Transactional` 注解的 `rollbackFor` 或 `noRollbackFor` 属性,我们可以自定义回滚行为。这在需要在一些情况下保留事务内的更改时非常有用。fC428资讯网——每日最新资讯28at.com

@Transactional(rollbackFor = CustomException.class)public void processWithCustomRollback() throws CustomException {    try {        // 执行一些数据库操作或其他逻辑        // 如果发生了某种业务异常,需要回滚事务        if (someCondition) {            throw new CustomException("发生了业务异常");        }        // 执行其他操作    } catch (CustomException ex) {        // 捕获到自定义异常后,可以根据业务需求进行相应处理        // 可以选择手动回滚事务        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();        // 或者抛出其他异常,由全局异常处理器进行处理        throw new AnotherCustomException("发生了另一个自定义异常", ex);    }}

10. 默认回滚行为

默认情况下,`@Transactional` 方法在任何未检查异常发生时都会回滚事务。如果需要自定义此行为,可以使用 `rollbackFor` 或 `noRollbackFor` 属性来指定具体的异常类型。fC428资讯网——每日最新资讯28at.com

11. 私有方法和 @Transactional

`@Transactional` 注解仅适用于公共方法。Spring 会在公共方法周围创建代理来管理事务行为。私有方法对代理不可见,因此 `@Transactional` 注解不会生效。如果需要在私有方法中使用事务管理,可以考虑将私有方法移动到公共方法中,并在该公共方法上应用 `@Transactional` 注解。fC428资讯网——每日最新资讯28at.com

12. 处理并发问题

Spring Boot的@Transactional注解提供了一种通过序列化事务来处理并发问题的机制。默认隔离级别通过确保事务不会相互干扰来防止大多数并发问题。fC428资讯网——每日最新资讯28at.com

@Servicepublic class UserService {  @Autowired  private UserRepository userRepository; @Transactional  public void updateUser(String username, String email) {    User user = userRepository.findByUsername(username);    user.setEmail(email);    // ...   }}

在此示例中,updateUser()标记为@Transactional,并且当多个线程尝试同时修改同一用户的电子邮件地址时,Spring 能确保事务被序列化。这可以防止数据不一致和竞争条件。fC428资讯网——每日最新资讯28at.com

请记住使用 @Transactional时, Spring使用的默认隔离级别是Isolation.DEFAULT,它与底层数据源的默认值一致。fC428资讯网——每日最新资讯28at.com

总结

以上是在 Spring Boot 中使用事务的一些最佳实践。了解这些实践对于构建可靠和一致的应用程序至关重要。通过正确地配置事务管理,我们可以确保数据的完整性,并避免出现潜在的并发问题。fC428资讯网——每日最新资讯28at.com


fC428资讯网——每日最新资讯28at.com


fC428资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-11208-0.htmlTransactional 在 Spring Boot 中的优秀实践

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 随机森林算法的力量:提高预测精度

下一篇: 使用C语言编写Linux应用程序:入门实践

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    2023年8月3日,三星电子举行Galaxy新品中国发布会,正式在国内推出了新一代折叠屏智能手机三星Galaxy Z Fold5与Galaxy Z Flip5,以及三星Galaxy Tab S9
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top