美文网首页Android开发Java
如何在Spring Boot开启事务

如何在Spring Boot开启事务

作者: zxianwei | 来源:发表于2020-04-14 13:51 被阅读0次

    今天给大家介绍如何在Spring Boot中开启事务,希望大家喜欢。
    说到事务,那什么是事务呢?

    事务(Transaction),一般是指要做的或所做的事情。

    • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
    • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
    • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
    • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

    那么如何在Spring Boot中使用呢?其实只需要两步即可:

    1. 在Application上添加@EnableTransactionManagement注解,用来开启事务。
    2. 在Service实现类的方法上添加@Transactional注解。

    具体实现:
    使用《Spring Boot中使用MyBatis详解》的代码,在TransactionalApplication启动类上添加@EnableTransactionManagement注解开启事务:

    package com.zxw.transactional;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    @SpringBootApplication
    //开启事务
    @EnableTransactionManagement
    public class TransactionalApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(TransactionalApplication.class, args);
        }
    
    }
    

    在Service实现方法上添加@Transactional注解:

    package com.zxw.transactional.controller;
    
    import com.zxw.transactional.bean.PoetryBean;
    import com.zxw.transactional.service.PoetryService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.web.bind.annotation.PostMapping;
    
    @Controller
    public class PoetryController {
    
        @Autowired
        private PoetryService poetryService;
    
        @Transactional
        @PostMapping("/register")
        public String registerVerse(PoetryBean poetryBean) {
            poetryService.addVerse(poetryBean);
            int i = 3 / 0;
            poetryService.addVerse(poetryBean);
            return "success";
        }
    }
    

    我在registerVerse方法添加了int i = 3 / 0;的代码,这段代码肯定会报错,在加了@Transactional注解后,我们看下可以往数据库插入几条数据?如果把@Transactional注解去掉又能添加几条呢?大家可以试试。

    项目地址:HelloSpringBoot

    相关文章

      网友评论

        本文标题:如何在Spring Boot开启事务

        本文链接:https://www.haomeiwen.com/subject/ihozmhtx.html