9898< meta property ="og:image " content ="http://upload-images.jianshu.io/upload_images/4221394-adb92cad87044855.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 ">
9999< meta property ="og:image " content ="http://upload-images.jianshu.io/upload_images/4221394-664b9249aee95b03.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 ">
100100< meta property ="og:image " content ="http://upload-images.jianshu.io/upload_images/4221394-72597434435d3bee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 ">
101- < meta property ="og:updated_time " content ="2017-01-04T07:32:26.504Z ">
101+ < meta property ="og:updated_time " content ="2017-01-04T13:24:03.665Z ">
102102< meta name ="twitter:card " content ="summary ">
103103< meta name ="twitter:title " content ="Java笔记之高并发秒杀API(一) ">
104104< meta name ="twitter:description " content ="本次系列的Java笔记是通过学习慕课网上的高并发秒杀API的视频而总结的,只是想通过写博客的过程能让自己梳理学习的过程,顺便时刻提醒自己。 本次秒杀API的项目的整体框架是Spring+Spring MVC+Mybatis,数据库为MySQL。 ">
@@ -358,7 +358,7 @@ <h1 class="post-title" itemprop="name headline">
358358
359359 < p > 本次系列的Java笔记是通过学习慕课网上的高并发秒杀API的视频而总结的,只是想通过写博客的过程能让自己梳理学习的过程,顺便时刻提醒自己。< br > 本次秒杀API的项目的整体框架是Spring+Spring MVC+Mybatis,数据库为MySQL。</ p >
360360< a id ="more "> </ a >
361- < h2 id ="创建项目 "> < a href ="#创建项目 " class ="headerlink " title ="创建项目 "> </ a > < strong > 创建项目</ strong > </ h2 > < p > 使用maven构建项目,因为使用命令行下载太慢,直接在Eclipse上使用maven来创建项目</ p >
361+ < h2 id ="创建项目 "> < a href ="#创建项目 " class ="headerlink " title ="创建项目 "> </ a > 创建项目</ h2 > < p > 使用maven构建项目,因为使用命令行下载太慢,直接在Eclipse上使用maven来创建项目</ p >
362362< p > < img src ="http://upload-images.jianshu.io/upload_images/4221394-29eb8eb4253e2fa1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="maven创建项目 "> < br > < img src ="http://upload-images.jianshu.io/upload_images/4221394-e9a282a9855be6c5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="maven创建项目 "> </ p >
363363< p > 如图:</ p >
364364< ul >
@@ -370,15 +370,14 @@ <h2 id="创建项目"><a href="#创建项目" class="headerlink" title="创建
370370< pre > < code > 默认的Servlet版本是2.3,但是该版本下JSP的EL表达式是不工作的,这里需要更改版本
371371</ code > </ pre > < p > 打开apache-tomcat-8.5.9\webapps\examples\WEB-INF\web.xml, 这是Tomcat的示例配置文件,将web-app标签内的内容覆盖到项目中的web.xml的web-app标签< br > < img src ="http://upload-images.jianshu.io/upload_images/4221394-7489e2a8abd55ee5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="Tomcat示例pom.xml "> </ p >
372372< pre > < code > Tomcat8.5.9给的示例文件显示使用的Servlet版本是3.1
373- </ code > </ pre > < h2 id ="依赖配置 "> < a href ="#依赖配置 " class ="headerlink " title ="依赖配置 "> </ a > < strong > 依赖配置</ strong > </ h2 > < p > 首先是补全文件,在src/main下添加两个文件夹java、test</ p >
373+ </ code > </ pre > < h2 id ="依赖配置 "> < a href ="#依赖配置 " class ="headerlink " title ="依赖配置 "> </ a > 依赖配置</ h2 > < p > 首先是补全文件,在src/main下添加两个文件夹java、test</ p >
374374< ul >
375375< li > java: 存放java的源文件</ li >
376376< li > test: 用于单元测试 </ li >
377377</ ul >
378378< p > 也可以直接在Eclipse中右键项目名,点击Build Path->Order and Export< br > < img src ="http://upload-images.jianshu.io/upload_images/4221394-a3425be83f5cd4eb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="Build Path "> </ p >
379379< p > 把需要的都选上,然后点击Apply,引入相关文件</ p >
380- < p > 接着打开pom.xml,配置依赖< br > < img src ="http://upload-images.jianshu.io/upload_images/4221394-adb92cad87044855.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="junit "> < br > 首先的改动是junit的版本,Eclipse自动生成的pom.xml的junit版本是3.8.1,这里改为4.11< br > 因为junit3.0的版本是默认使用编程的方式运行的, 而4.0的版本是默认通过注解的方式来运行junit的 </ p >
381- < p > 接着就是补全项目的依赖</ p >
380+ < p > 接着打开pom.xml,配置依赖< br > < img src ="http://upload-images.jianshu.io/upload_images/4221394-adb92cad87044855.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="junit "> < br > 首先的改动是junit的版本,Eclipse自动生成的pom.xml的junit版本是3.8.1,这里改为4.11< br > 因为junit3.0的版本是默认使用编程的方式运行的, 而4.0的版本是默认通过注解的方式来运行junit的< br > 接着就是补全项目的依赖</ p >
382381< h3 id ="日志相关依赖 "> < a href ="#日志相关依赖 " class ="headerlink " title ="日志相关依赖 "> </ a > 日志相关依赖</ h3 > < p > 本次项目采用slf4j+logback的组合</ p >
383382< figure class ="highlight plain "> < table > < tr > < td class ="gutter "> < pre > < div class ="line "> 1</ div > < div class ="line "> 2</ div > < div class ="line "> 3</ div > < div class ="line "> 4</ div > < div class ="line "> 5</ div > < div class ="line "> 6</ div > < div class ="line "> 7</ div > < div class ="line "> 8</ div > < div class ="line "> 9</ div > < div class ="line "> 10</ div > < div class ="line "> 11</ div > < div class ="line "> 12</ div > < div class ="line "> 13</ div > < div class ="line "> 14</ div > < div class ="line "> 15</ div > < div class ="line "> 16</ div > < div class ="line "> 17</ div > < div class ="line "> 18</ div > </ pre > </ td > < td class ="code "> < pre > < div class ="line "> <dependency></ div > < div class ="line "> <groupId>org.slf4j</groupId></ div > < div class ="line "> <artifactId>slf4j-api</artifactId></ div > < div class ="line "> <version>1.7.12</version></ div > < div class ="line "> </dependency></ div > < div class ="line "> </ div > < div class ="line "> <dependency></ div > < div class ="line "> <groupId>ch.qos.logback</groupId></ div > < div class ="line "> <artifactId>logback-core</artifactId></ div > < div class ="line "> <version>1.1.1</version></ div > < div class ="line "> </dependency></ div > < div class ="line "> </ div > < div class ="line "> <!-- 实现slf4j接口并整合 --></ div > < div class ="line "> <dependency></ div > < div class ="line "> <groupId>ch.qos.logback</groupId></ div > < div class ="line "> <artifactId>logback-classic</artifactId></ div > < div class ="line "> <version>1.1.1</version></ div > < div class ="line "> </dependency></ div > </ pre > </ td > </ tr > </ table > </ figure >
384383< p > logback的依赖有两个: logback-core、logback-classic</ p >
@@ -402,8 +401,8 @@ <h4 id="Spring-Dao层的依赖"><a href="#Spring-Dao层的依赖" class="headerl
402401< h4 id ="Spring-WEB相关的依赖 "> < a href ="#Spring-WEB相关的依赖 " class ="headerlink " title ="Spring WEB相关的依赖 "> </ a > Spring WEB相关的依赖</ h4 > < p > 包括与Spring MVC相关的依赖</ p >
403402< figure class ="highlight plain "> < table > < tr > < td class ="gutter "> < pre > < div class ="line "> 1</ div > < div class ="line "> 2</ div > < div class ="line "> 3</ div > < div class ="line "> 4</ div > < div class ="line "> 5</ div > < div class ="line "> 6</ div > < div class ="line "> 7</ div > < div class ="line "> 8</ div > < div class ="line "> 9</ div > < div class ="line "> 10</ div > < div class ="line "> 11</ div > < div class ="line "> 12</ div > </ pre > </ td > < td class ="code "> < pre > < div class ="line "> <!-- Spring WEB相关的依赖 --></ div > < div class ="line "> <dependency></ div > < div class ="line "> <groupId>org.springframework</groupId></ div > < div class ="line "> <artifactId>spring-web</artifactId></ div > < div class ="line "> <version>4.1.7.RELEASE</version></ div > < div class ="line "> </dependency></ div > < div class ="line "> </ div > < div class ="line "> <dependency></ div > < div class ="line "> <groupId>org.springframework</groupId></ div > < div class ="line "> <artifactId>spring-webmvc</artifactId></ div > < div class ="line "> <version>4.1.7.RELEASE</version></ div > < div class ="line "> </dependency></ div > </ pre > </ td > </ tr > </ table > </ figure >
404403< h4 id ="Spring-test相关的依赖 "> < a href ="#Spring-test相关的依赖 " class ="headerlink " title ="Spring test相关的依赖 "> </ a > Spring test相关的依赖</ h4 > < figure class ="highlight plain "> < table > < tr > < td class ="gutter "> < pre > < div class ="line "> 1</ div > < div class ="line "> 2</ div > < div class ="line "> 3</ div > < div class ="line "> 4</ div > < div class ="line "> 5</ div > < div class ="line "> 6</ div > < div class ="line "> 7</ div > < div class ="line "> 8</ div > < div class ="line "> 9</ div > < div class ="line "> 10</ div > < div class ="line "> 11</ div > < div class ="line "> 12</ div > </ pre > </ td > < td class ="code "> < pre > < div class ="line "> <!-- Spring WEB相关的依赖 --></ div > < div class ="line "> <dependency></ div > < div class ="line "> <groupId>org.springframework</groupId></ div > < div class ="line "> <artifactId>spring-web</artifactId></ div > < div class ="line "> <version>4.1.7.RELEASE</version></ div > < div class ="line "> </dependency></ div > < div class ="line "> </ div > < div class ="line "> <dependency></ div > < div class ="line "> <groupId>org.springframework</groupId></ div > < div class ="line "> <artifactId>spring-webmvc</artifactId></ div > < div class ="line "> <version>4.1.7.RELEASE</version></ div > < div class ="line "> </dependency></ div > </ pre > </ td > </ tr > </ table > </ figure >
405- < p > 虽然以上有些依赖版本相对有些老旧,但毕竟是练习,在不是特别熟悉这些框架和服务时,尽量按照视频中的版本来。在实际工作中应该前期就把要采用的服务的版本特性了解清楚。</ p >
406- < h2 id ="业务分析 "> < a href ="#业务分析 " class ="headerlink " title ="业务分析 "> </ a > < strong > 业务分析</ strong > </ h2 > < p > < img src ="http://upload-images.jianshu.io/upload_images/4221394-664b9249aee95b03.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="业务分析 "> </ p >
404+ < p > 虽然以上有些依赖版本相对有些老旧,但毕竟是练习,在不是特别熟悉这些框架和服务时,尽量按照视频中的版本来,不然等到测试时,会有各种玄学的问题,比较麻烦 。在实际工作中应该前期就把要采用的服务的版本特性了解清楚。</ p >
405+ < h2 id ="业务分析 "> < a href ="#业务分析 " class ="headerlink " title ="业务分析 "> </ a > 业务分析</ h2 > < p > < img src ="http://upload-images.jianshu.io/upload_images/4221394-664b9249aee95b03.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="业务分析 "> </ p >
407406< pre > < code > 秒杀业务的核心就是对库存的处理,而难点主要是竞争
408407</ code > </ pre > < p > 当n个用户同时竞争一个秒杀商品时,为了保证数据准确,没有出现数据的脏读、幻读等;保证商家没有出现超卖或者少卖的现象,就必然会用到事务+行级锁</ p >
409408< p > < img src ="http://upload-images.jianshu.io/upload_images/4221394-72597434435d3bee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 " alt ="用户针对库存业务分析 "> </ p >
@@ -450,6 +449,10 @@ <h2 id="业务分析"><a href="#业务分析" class="headerlink" title="业务
450449
451450 < div class ="post-nav-prev post-nav-item ">
452451
452+ < a href ="/2017/01/05/Java笔记之高并发秒杀API-二/ " rel ="prev " title ="Java笔记之高并发秒杀API(二) ">
453+ Java笔记之高并发秒杀API(二) < i class ="fa fa-chevron-right "> </ i >
454+ </ a >
455+
453456 </ div >
454457 </ div >
455458
@@ -518,7 +521,7 @@ <h2 id="业务分析"><a href="#业务分析" class="headerlink" title="业务
518521
519522 < div class ="site-state-item site-state-posts ">
520523 < a href ="/archives ">
521- < span class ="site-state-item-count "> 2 </ span >
524+ < span class ="site-state-item-count "> 3 </ span >
522525 < span class ="site-state-item-name "> 日志</ span >
523526 </ a >
524527 </ div >
0 commit comments