如何在Spring Boot开启事务
2020-04-14 本文已影响0人
zxianwei
今天给大家介绍如何在Spring Boot中开启事务,希望大家喜欢。
说到事务,那什么是事务呢?
事务(Transaction),一般是指要做的或所做的事情。
- 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
- 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
- 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
那么如何在Spring Boot中使用呢?其实只需要两步即可:
- 在Application上添加@EnableTransactionManagement注解,用来开启事务。
- 在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