• 如何实现Spring的事务管理功能:@Transactional声明式事务


    Spring MVC中处理SQL事务,可以使用Spring的事务管理功能来实现。Spring提供了多种配置和编程方式来管理事务,以下是一种常见的基于注解的方法来处理SQL事务:

    1. 配置数据源和事务管理器:首先,您需要配置数据源和事务管理器。这通常在Spring的配置文件(如XML配置文件)中完成。以下是一个示例配置:

    ```xml

    1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    2. <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    3. <property name="url" value="jdbc:mysql://localhost:3306/db_hospital?serverTimezone=UTC"/>
    4. <property name="username" value="root"/>
    5. <property name="password" value="666666"/>
    6. <property name="initialSize" value="10"/>
    7. <property name="minIdle" value="5"/>
    8. <property name="maxActive" value="20"/>
    9. <property name="maxWait" value="60000"/>
    10. bean>
    11. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    12.     <property name="dataSource" ref="dataSource" />
    13. bean>

    destroy-method="close" 是一个常见的配置选项,通常用于管理一些资源,如数据库连接池或文件流。当bean被销毁时,Spring会调用指定的销毁方法,以确保资源被正确释放或关闭,从而避免资源泄漏或其他问题。
    ```

    2. 使用 `@Transactional` 注解:在DAO层或Service层的Service实现类或接口的方法上使用`@Transactional`注解来标记需要进行事务管理的方法。例如:

    ```java

    1. @Service
    2. public class YourService {
    3.     
    4.     @Autowired
    5.     private YourDao yourDao;
    6.     @Transactional
    7.     public void performTransactionalOperation() {
    8.         // 在此处执行需要事务管理的数据库操作
    9.         yourDao.insertData();
    10.         yourDao.updateData();
    11.     }
    12. }


    ```

    3. 配置事务管理器和扫描注解:确保您的Spring配置文件中启用了注解扫描和事务管理器的配置:

    ```xml

    1. <context:component-scan base-package="com.your.package" />
    2. <tx:annotation-driven transaction-manager="transactionManager" />


    ```

    4. 在Controller中调用Service接口的方法:最后,在Controller中调用带有`@Transactional`注解的Service方法,以触发事务管理。

    1. package com.ekgc.controller;
    2. import com.ekgc.pojo.MedicalAdvice;
    3. import com.ekgc.response.RespBody;
    4. import com.ekgc.service.AddAdviceService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.RequestBody;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RestController;
    9. /**
    10. * @author Magic
    11. * @version 1.0
    12. */
    13. @RestController
    14. public class AddAdviceController {
    15. @Autowired
    16. private AddAdviceService addAdviceService;
    17. @RequestMapping("/AddAdvice")
    18. public RespBody AddAdvice(@RequestBody MedicalAdvice advice){
    19. boolean addRes = addAdviceService.AddAdvice(advice);
    20. if (!addRes) {
    21. return new RespBody(501,null,"添加失败");
    22. }
    23. return new RespBody(200,null,"添加成功");
    24. }
    25. }

    这样配置后,如果在`AddAdvice`方法中的任何数据库操作失败,Spring将自动回滚事务,确保数据的一致性。如果所有操作成功,事务将提交。

    请注意,Spring提供了多种事务管理策略,包括声明式事务(如上述示例中的`@Transactional`注解)和编程式事务,您可以根据具体情况选择适合的方法来处理事务。同时,也要确保您的数据源和数据库驱动程序正确配置,以确保事务管理正常工作。

     

  • 相关阅读:
    聚焦养老主业,平安养老险构建一体化养老生态圈
    (零代) MDD 开创低代码领行设计模式
    何为vue脚手架?
    阿里面试官问我Redis 数据结构,这一篇文章足以征服他
    JS-函数
    【SpringBoot | 过滤器/拦截器/AOP/控制器】的区别
    python知识点
    SpringBoot2.6 升级到springBoot2.7 H2,JPA,Security问题
    读书笔记:《Python 和 Dask 数据科学》
    61 不同路径
  • 原文地址:https://blog.csdn.net/qq_58647634/article/details/132759050