今天給大家介紹如何在Spring Boot中開啟事務丧枪,希望大家喜歡之斯。
說到事務日杈,那什么是事務呢?
事務(Transaction)佑刷,一般是指要做的或所做的事情莉擒。
- 原子性(Atomicity):事務作為一個整體被執(zhí)行,包含在其中的對數(shù)據(jù)庫的操作要么全部被執(zhí)行项乒,要么都不執(zhí)行啰劲。
- 一致性(Consistency):事務應確保數(shù)據(jù)庫的狀態(tài)從一個一致狀態(tài)轉變?yōu)榱硪粋€一致狀態(tài)。一致狀態(tài)的含義是數(shù)據(jù)庫中的數(shù)據(jù)應滿足完整性約束檀何。
- 隔離性(Isolation):多個事務并發(fā)執(zhí)行時蝇裤,一個事務的執(zhí)行不應影響其他事務的執(zhí)行。
- 持久性(Durability):已被提交的事務對數(shù)據(jù)庫的修改應該永久保存在數(shù)據(jù)庫中频鉴。
那么如何在Spring Boot中使用呢栓辜?其實只需要兩步即可:
- 在Application上添加@EnableTransactionManagement注解,用來開啟事務垛孔。
- 在Service實現(xiàn)類的方法上添加@Transactional注解藕甩。
具體實現(xiàn):
使用《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實現(xiàn)方法上添加@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注解后,我們看下可以往數(shù)據(jù)庫插入幾條數(shù)據(jù)概作?如果把@Transactional注解去掉又能添加幾條呢腋妙?大家可以試試。
項目地址:HelloSpringBoot