前言
- 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
- 事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态。
- springboot开启事务很简单,只需要一个注解@Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事务,引入它们依赖的时候,事物就默认开启。当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器。
配置文件application.yml
本文使用的是之前整合JPA的文章,具体可以参考 SpringBoot 整合JPA。这里的jpa配置略微不同,原因是需要指定数据库引擎为InnoDB,否则不能使用事务。
1 | spring: |
创建controller类
- 这里的会抛出 Data truncation: Data too long for column ‘house_name’ at row 1(数据过长异常),用于测试事务。
- @Transactional:打开一个事务。加在类上所有方法添加事务,一般不这样用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class HouseController {
private HouseRepository houseRepository;
public String test1() {
houseRepository.save(new House("house1", "100平方米"));
houseRepository.save(new House("house2", "100平方米"));
houseRepository.save(new House("house3", "100平方米"));
houseRepository.save(new House("house444444444", "100平方米"));
houseRepository.save(new House("house5", "100平方米"));
return "success";
}
public String test2() {
houseRepository.save(new House("house6", "100平方米"));
houseRepository.save(new House("house7", "100平方米"));
houseRepository.save(new House("house8", "100平方米"));
houseRepository.save(new House("house999999999", "100平方米"));
houseRepository.save(new House("house10", "100平方米"));
return "success";
}
}