前言:
本次系列的Java筆記是通過(guò)學(xué)習(xí)慕課網(wǎng)上的高并發(fā)秒殺API的視頻而總結(jié)的,只是想通過(guò)寫博客的過(guò)程能讓自己梳理自學(xué)的過(guò)程恋拍,順便時(shí)刻提醒自己衔统。
本次秒殺API的項(xiàng)目的Java版本至少是1.6以上
整體框架是Spring+Spring MVC+Mybatis行楞,數(shù)據(jù)庫(kù)為MySQL攒暇,前端框架為Bootstrap。
一子房、 創(chuàng)建項(xiàng)目
使用maven構(gòu)建項(xiàng)目形用,因?yàn)槭褂妹钚邢螺d太慢,直接在Eclipse上使用maven來(lái)創(chuàng)建項(xiàng)目
如圖:
- archetypeArtifactId: maven-archetype-webapp
- gtoupId: org.seckill
- artifactId: seckill
打開src\main\webapp\WEB-INF\web.xml
默認(rèn)的Servlet版本是2.3证杭,但是該版本下JSP的EL表達(dá)式是不工作的田度,這里需要更改版本
打開apache-tomcat-8.5.9\webapps\examples\WEB-INF\web.xml, 這是Tomcat的示例配置文件解愤,將web-app標(biāo)簽內(nèi)的內(nèi)容覆蓋到項(xiàng)目中的web.xml的web-app標(biāo)簽
Tomcat8.5.9給的示例文件顯示使用的Servlet版本是3.1
二镇饺、依賴配置
首先是補(bǔ)全文件,在src/main下添加兩個(gè)文件夾java送讲、test
- java: 存放java的源文件
- test: 用于單元測(cè)試
也可以直接在Eclipse中右鍵項(xiàng)目名奸笤,點(diǎn)擊Build Path->Order and Export
把需要的都選上,然后點(diǎn)擊Apply哼鬓,引入相關(guān)文件
接著打開pom.xml监右,配置依賴
首先的改動(dòng)是junit的版本,Eclipse自動(dòng)生成的pom.xml的junit版本是3.8.1异希,這里改為4.11健盒。
因?yàn)閖unit3.0的版本是默認(rèn)使用編程的方式運(yùn)行的, 而4.0的版本是默認(rèn)通過(guò)注解的方式來(lái)運(yùn)行junit的
接著就是補(bǔ)全項(xiàng)目的依賴
1称簿、日志相關(guān)依賴
本次項(xiàng)目采用slf4j+logback的組合
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 實(shí)現(xiàn)slf4j接口并整合 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
logback的依賴有兩個(gè): logback-core扣癣、logback-classic
- logback-core: 實(shí)現(xiàn)logback核心的功能
- logback-calssic: 實(shí)現(xiàn)slf4j接口并整合
2、數(shù)據(jù)庫(kù)相關(guān)依賴
包括數(shù)據(jù)庫(kù)驅(qū)動(dòng)憨降,數(shù)據(jù)庫(kù)連接池c3p0
<!-- 數(shù)據(jù)庫(kù)相關(guān)依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
3父虑、DAO框架相關(guān)依賴——即Mybatis依賴
Mybatis依賴主要有兩個(gè),一個(gè)是Mybatis自身的依賴券册,二是Mybatis和Spring整合的依賴
<!-- DAO框架:Mybatis相關(guān)依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!-- Mybatis自身實(shí)現(xiàn)Spring的整合依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
4频轿、Servlet WEB相關(guān)依賴
一些相關(guān)的標(biāo)簽垂涯、jstl烁焙、jackson等
<!-- Servlet Web相關(guān)依賴 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
5、Spring相關(guān)依賴
5.1耕赘、Spring核心依賴
包括spring-beans相關(guān)的依賴骄蝇, 一些spring擴(kuò)展依賴如:spring-context
<!-- Spring核心依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
5.2、Spring Dao層的依賴
- spring-jdbc: jdbc提供數(shù)據(jù)庫(kù)相關(guān)的事務(wù)管理器
- spring-tx: Spring的聲明式事務(wù)
<!-- Spring Dao層的依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
5.3操骡、Spring WEB相關(guān)的依賴
包括與Spring MVC相關(guān)的依賴
<!-- Spring WEB相關(guān)的依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
5.4九火、Spring test相關(guān)的依賴
<!-- Spring WEB相關(guān)的依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
雖然以上有些依賴版本相對(duì)有些老舊赚窃,但畢竟是練習(xí),在不是特別熟悉這些框架和服務(wù)時(shí)岔激,盡量按照視頻中的版本來(lái)勒极,不然等到測(cè)試時(shí),會(huì)有各種玄學(xué)的問(wèn)題虑鼎,比較麻煩辱匿。在實(shí)際工作中應(yīng)該前期就把要采用的服務(wù)的版本特性了解清楚。
三炫彩、 業(yè)務(wù)分析
秒殺業(yè)務(wù)的核心就是對(duì)庫(kù)存的處理匾七,而難點(diǎn)主要是競(jìng)爭(zhēng)
當(dāng)n個(gè)用戶同時(shí)競(jìng)爭(zhēng)一個(gè)秒殺商品時(shí),為了保證數(shù)據(jù)準(zhǔn)確江兢,沒(méi)有出現(xiàn)數(shù)據(jù)的臟讀昨忆、幻讀等谦疾;保證商家沒(méi)有出現(xiàn)超賣或者少賣的現(xiàn)象甜滨,就必然會(huì)用到事務(wù)+行級(jí)鎖
至此实抡,準(zhǔn)備工作完成