第10章—开启事务
spring boot 系列學習記錄:http://www.cnblogs.com/jinxiaohang/p/8111057.html
碼云源碼地址:https://gitee.com/jinxiaohang/springboot
此前,我們主要通過XML配置Spring來托管事務。在SpringBoot則非常簡單,只需在業務層添加事務注解(@Transactional )即可快速開啟事務。雖然事務很簡單,但對于數據方面是需要謹慎對待的,識別常見坑點對我們開發有幫助。
推薦做法:在業務層統一拋出異常,然后在控制層統一處理。
1. 引入依賴
如果是新建項目的,可以在這頁添加依賴,如是原有項目可直接編寫。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xiaohang</groupId><artifactId>springboot-transactional</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springboot-transactional</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>?
二、添加數據源
spring:datasource:url: jdbc:mysql://localhost:3306/test?useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverjpa:hibernate:ddl-auto: updateshow-sql: true?
三、編寫各層代碼
- 實體層
?
- dao層
?
- service層
?
- service實現層
?
- 測試層
?
三、測試
?原始數據:
?
?
?不開啟事務,不拋出異常時:
?
?
?不開啟事務,拋出異常時(轉賬時發生錯誤,錢扣完,但是對方錢未到賬;或者錢到帳了,但是錢未扣。)
?
?
?先恢復數據:
?開啟事務,拋出異常時。
?
轉載于:https://www.cnblogs.com/jinxiaohang/p/8296549.html
總結
- 上一篇: VT 105120毫米实验自行反战车炮?
- 下一篇: 04需求工程软件建模与分析阅读笔记之四