高并發(fā)秒殺API(一)

前言:

本次系列的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)目

maven創(chuàng)建項(xiàng)目

maven創(chuàng)建項(xiàng)目

如圖:

  • archetypeArtifactId: maven-archetype-webapp
  • gtoupId: org.seckill
  • artifactId: seckill

打開src\main\webapp\WEB-INF\web.xml


Servlet版本
默認(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)簽


Tomcat示例pom.xml
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


Build Path

把需要的都選上,然后點(diǎn)擊Apply哼鬓,引入相關(guān)文件

接著打開pom.xml监右,配置依賴


junit

首先的改動(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ù)分析
秒殺業(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í)鎖

用戶針對(duì)庫(kù)存業(yè)務(wù)分析

至此实抡,準(zhǔn)備工作完成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吗购,一起剝皮案震驚了整個(gè)濱河市策彤,隨后出現(xiàn)的幾起案子擅憔,更是在濱河造成了極大的恐慌币呵,老刑警劉巖涌穆,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件世澜,死亡現(xiàn)場(chǎng)離奇詭異独旷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)寥裂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門嵌洼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人封恰,你說(shuō)我怎么就攤上這事麻养。” “怎么了诺舔?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵鳖昌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我低飒,道長(zhǎng)许昨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任褥赊,我火速辦了婚禮糕档,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拌喉。我一直安慰自己速那,他們只是感情好俐银,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著端仰,像睡著了一般捶惜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荔烧,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天售躁,我揣著相機(jī)與錄音,去河邊找鬼茴晋。 笑死陪捷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诺擅。 我是一名探鬼主播市袖,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼烁涌!你這毒婦竟也來(lái)了苍碟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撮执,失蹤者是張志新(化名)和其女友劉穎微峰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抒钱,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜓肆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谋币。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仗扬。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蕾额,靈堂內(nèi)的尸體忽然破棺而出早芭,到底是詐尸還是另有隱情,我是刑警寧澤诅蝶,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布退个,位于F島的核電站,受9級(jí)特大地震影響调炬,放射性物質(zhì)發(fā)生泄漏语盈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一筐眷、第九天 我趴在偏房一處隱蔽的房頂上張望黎烈。 院中可真熱鬧习柠,春花似錦匀谣、人聲如沸照棋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)烈炭。三九已至,卻和暖如春宝恶,著一層夾襖步出監(jiān)牢的瞬間符隙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工垫毙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霹疫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓综芥,卻偏偏與公主長(zhǎng)得像丽蝎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膀藐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容