• Spring之事务开发


    什么是事务?

    事务是指数据库管理系统中的一个执行单位或一个逻辑工作单元,它由一个或多个数据库操作序列组成。事务具有以下四个特性,通常被称为ACID特性:

    • 原子性(Atomicity):事务是一个不可分割的操作单元,要么全部执行成功,要么全部失败回滚。
    • 一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏。
    • 隔离性(Isolation):事务之间相互隔离,一个事务的执行不受其他事务的影响。
    • 持久性(Durability):事务提交后,其结果将永久保存在数据库中。

    通过使用事务,可以确保数据库操作的一致性和可靠性,并提供了数据恢复和并发控制机制。

    Spring中的事务开发

    Spring框架为开发者提供了强大的事务管理功能,它通过AOP(面向切面编程)和声明式事务管理来实现事务的控制。

    声明式事务管理

    声明式事务管理是通过在配置文件或注解中定义事务的属性,而无需显示地在代码中编写事务处理的逻辑。Spring会根据配置和注解自动为我们管理事务。

    下面是一个使用声明式事务管理的示例代码:

    1. @Service
    2. @Transactional // 声明该类中的所有方法都使用事务
    3. public class UserService {
    4. @Autowired
    5. private UserRepository userRepository;
    6. public void transferMoney(String fromUser, String toUser, double amount) {
    7. User from = userRepository.findByUsername(fromUser);
    8. User to = userRepository.findByUsername(toUser);
    9. from.setBalance(from.getBalance() - amount);
    10. to.setBalance(to.getBalance() + amount);
    11. userRepository.save(from);
    12. userRepository.save(to);
    13. }
    14. }

    在上述示例中,@Service 注解表示这是一个服务类,@Transactional 注解表示该类中的所有方法都将被包装在一个事务中。

    编程式事务管理

    除了声明式事务管理外,Spring还支持编程式事务管理。这种方式需要在代码中显式地处理事务的开始、提交和回滚等操作。

    下面是一个使用编程式事务管理的示例代码:

    1. @Service
    2. public class UserService {
    3. @Autowired
    4. private TransactionTemplate transactionTemplate;
    5. @Autowired
    6. private UserRepository userRepository;
    7. public void transferMoney(String fromUser, String toUser, double amount) {
    8. transactionTemplate.execute(status -> {
    9. try {
    10. User from = userRepository.findByUsername(fromUser);
    11. User to = userRepository.findByUsername(toUser);
    12. from.setBalance(from.getBalance() - amount);
    13. to.setBalance(to.getBalance() + amount);
    14. userRepository.save(from);
    15. userRepository.save(to);
    16. return null; // 返回null表示事务成功提交
    17. } catch (Exception e) {
    18. status.setRollbackOnly(); // 发生异常时回滚事务
    19. throw e;
    20. }
    21. });
    22. }
    23. }

    在上述示例中,TransactionTemplate 是Spring提供的一个用于编程式事务管理的类。我们可以通过调用其 execute() 方法,在回调函数中进行事务相关的操作。如果方法成功执行并返回null,事务将被提交;如果发生异常,事务将被回滚。

    无论是声明式事务管理还是编程式事务管理,Spring都提供了灵活且可扩展的方式来处理事务,以满足不同应用场景的需求。以上示例仅为演示目的,实际使用时可能需要根据具体情况进行适当调整。

  • 相关阅读:
    修饰符.sync的用法
    进入Web3.0的元宇宙新纪元,科技巨头争先“跑马圈地”
    Go Run - Go 语言中的简洁指令
    sqlalchemy模块介绍、单表操作、一对多表操作、多对多表操作、flask集成.
    《HTML+CSS+JavaScript》之第13章 字体样式
    【技术指南资料】编码器与正交译码器
    Vue的详细教程--基础语法【上】
    Dubbo之服务分组、分组聚合。
    ----JAVA 继承----
    Centos7搭建给予虚拟用户的FTP服务
  • 原文地址:https://blog.csdn.net/weixin_52721608/article/details/132792612