一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API
项目开发流程
本项目很适合学习一些技术的基础,这个项目的开发分为几个流程,很基础地教你接触到一个相对有技术含量的项目
Java高并发秒杀API之业务分析与DAO层
Java高并发秒杀API之web层
Java高并发秒杀API之Service层
Java高并发秒杀API之高并发优化
按照上面几个流程走下去,你要有基本的Maven认识以及Java语法的一些概念,要不然可能不太理解
其实这几个流程也就是开发的流程,首先从DAO层开始开发,从后往前开发,开始Coding吧!
项目总结可能比较长,由于公众号文章的字数限制今天只能先讲解第一节,如果这篇文章看得人多并且点赞数较高的话明天就继续更新,哈哈~
项目环境的搭建
操作系统: Ubuntu 17.04
IDE:IntelliJ IDEA 2016.2.5 x64 用Eclipse也一样的,工具时靠人用的
JDK: JDK1.8 建议使用JDK1.7以上版本,有许多语法糖用着挺舒服的
Web容器: Tomcat 8.0
数据库:Mysql-5.6.17-WinX64 实验性的项目用Mysql就足够啦
依赖管理工具: Maven 管理jar包真的很方便
这里列出的环境不是必须的,你喜欢用什么就用什么,这里只是给出参考,不过不同的版本可能会引起各种不同的问题就需要我们自己去发现以及排查,在这里使用Maven的话时方便我们管理JAR包,我们不用跑去各种开源框架的官网去下载一个又一个的JAR包,配置好了Maven后添加pom文件坐标就会从中央仓库下载JAR包,如果哪天替换版本也很方便
项目效果图
秒杀商品列表
秒杀结束提示界面
开始秒杀提示界面
重复秒杀提示界面
秒杀成功提示界面
项目的运行
下载
或者
git clone https://github.com/Sunybyjava/seckill.git
导入到IDE
这里因为是使用创建的项目,所以使用直接打开是很方便的,提前是你要配置好的相关配置,以及项目版本,版本必须在以上,因为在项目中使用了的以及,所以低于这个版本编译会失败的
IDEA
直接在主界面选择,然后找到项目所在路径,点击打开就可以了
Eclipse 这个项目是基于创建,我这里把项目转成了的项目,如果你使用Eclipse的话也可以直接导入,只是步骤更繁琐一点,Eclipse导入步骤
(一)Java高并发秒杀APi之业务分析与DAO层代码编写
构建项目的基本骨架
首先我们要搭建出一个符合Maven约定的目录来,这里大致有两种方式,第一种:
第一种使用命令行手动构建一个maven结构的目录,当然我基本不会这样构建
这里要注意的是使用进行创建,在Maven老版本中是使用,现在这种方法已经被弃用了,所以使用命令行创建的话注意了,稍微解释下这段语句的意思,就是构建一个一个骨架的Webapp项目,然后为,为,这里是Maven相关知识,可以按照自己的情况进行修改
2.第二种直接在IDE中进行创建,这里以IDEA为例
点击左上角
然后在里面勾选,然后再往下拉找到,选中它,注意要先勾选那个选项,否则选择不了,然后点击继续
+然后就填写你的Maven的那几个重要的坐标了,自己看着填吧
+再就配置你的Maven的相关信息,默认应该是配置好的
+之后就是点,到此不出意外的话就应该创建成功了
构建pom文件
项目基本的骨架我们就创建出来了,接下来我们要添加一些基本的JAR包的依赖,也就是在中添加各种开源组件的三坐标了
建立数据库
在根目录下有一个sql文件夹里面有一个sql数据库脚本,如果你不想自己手写的话就直接导入到你的数据库里面去吧,不过还是建议自己手写一遍加深印象
在建立数据库的,如果按照我这里的数据库脚本建立的话应该是没问题的,但是我按照视频里面的数据库脚本建表的话发生了一个错误
这个报错看起来比较的诡异,我仔细检查也没有错误,它总提示我要有一个默认的值,可我记得我以前就不会这样,然后视频里面也没有执行错误,然后我感觉可能时版本的差异,我查看了下我数据库版本,在登录控制台后输入指令,在控制台的我暂时知道的有两种方式:
我的输出结果如下:
进控制台就已经可以看到版本了,我的Mysql是的,以前我用的时的,然后去上搜索了下,找到了几个答案,参考链接:
https://stackoverflow.com/questions/9192027/invalid-default-value-for-create-date-timestamp-field
mysql官方的解释:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date
https://stackoverflow.com/questions/34570611/mysql-community-5-7-invalid-default-value-datetime-field-type
总结出来一句话就是:
mysql 5.7中,默认使用的是严格模式,这里的日期必须要有时间,所以一定要给出默认值,要么就修改数据库设置
然后网友评论里总结出来的几种解决办法,未经测试!:
下次有问题一定要先看一下评论!!!create不了的同学,可以这样写:
关于timestamp的问题,需要先运行 set explicit_defaults_for_timestamp = 1,否则会报invalid default value错误
还需要注意的是SQL版本的问题会导致视频中seckill表创建会出错。只要将create_time放在start_time和end_time之前是方便的解决方法。
对比下我修改过后的跟视频里面的片段:
我们可以看到在这三个字段有一个小差别,那就是给,,三个字段都添加一个默认值,然后执行数据库语句就没问题了
这里我们需要修改下中的servlet版本为
打开下的,修改为以下代码:
修改的原因有以下几点:
高版本的Servlet支持更多的特性,更方便我们的Coding,特别是支持注解这一特性
在中新加入了接口的实现,,我们可以使用引入的
举个栗子:
在以前我们这样配置:
在以后可以使用配置,也就是我们项目中使用的方法
两种方法的效果都是一样的,主要不要同时使用,否则会报错的
建立实体类
首先建立 秒杀状态表
再建立 秒杀商品信息
对实体类创建对应的接口,也就是接口类
首先创建,在我这里位于包下
再创建
接下来书写配置文件
建立对应的
首先在建立这个包,也就是对应接口文件包一样的包名,这样符合Maven的约定,就是资源放置在包下,包下则是放置类文件,编译后最后还是会在同一个目录下
首先建立
建立
建立的配置文件
然后建立连接数据库的配置文件,这里的属性要根据自己的需要去进行修改,切勿直接复制使用
建立的的配置文件,在包下创建
基础的部分我们搭建完成了,然后要开始测试了 在里面有一个快速建立测试的快捷键,在某个要测试的类里面按下这个快捷键就会出现,然后选择你要测试的方法跟测试的工具就可以了,这里我们使用Junit作为测试
建立文件,代码如下
测试中可能会出现参数绑定失败的错误,在接口中的方法里面添加的注解,显示的告诉mybatis参数的名称是什么,例如
PS:如果觉得我的分享不错,欢迎大家随手点赞、转发。
(未完待续)
Java团长
专注于Java干货分享
扫描上方二维码获取更多Java干货
领取专属 10元无门槛券
私享最新 技术干货