点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

源码精品专栏

  • 中文详细注释的开源项目

  • RPC 框架 Dubbo 源码解析

  • 网络应用框架 Netty 源码解析

  • 消息中间件 RocketMQ 源码解析

  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析

  • 作业调度中间件 Elastic-Job 源码解析

  • 分布式事务中间件 TCC-Transaction 源码解析

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码

来源:http://t.cn/EoOnJbR

  • 项目开发流程

  • 项目环境的搭建

  • 项目效果图

  • 项目的运行


一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API

项目开发流程

本项目很适合学习一些技术的基础,这个项目的开发分为几个流程,很基础地教你接触到一个相对有技术含量的项目

  1. Java高并发秒杀API之业务分析与DAO层

  2. Java高并发秒杀API之web层

  3. Java高并发秒杀API之Service层

  4. 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包,如果哪天替换版本也很方便


项目效果图

秒杀商品列表

img

秒杀结束提示界面

img

开始秒杀提示界面

img

重复秒杀提示界面

img

秒杀成功提示界面

img

项目的运行

下载

clone

导入到IDE

这里因为是使用IDEA创建的项目,所以使用IDEA直接打开是很方便的,提前是你要配置好maven的相关配置,以及项目JDK版本,JDK版本必须在1.8以上,因为在项目中使用了Java8LocalDateTime以及LocalDate,所以低于这个版本编译会失败的

  • IDEA
    直接在主界面选择Open,然后找到项目所在路径,点击pom.xml打开就可以了

  • Eclipse 这个项目是基于IDEA创建,我这里把项目转成了Eclipse的项目,如果你使用Eclipse的话也可以直接导入,只是步骤更繁琐一点,Eclipse导入步骤

(一)Java高并发秒杀APi之业务分析与DAO层代码编写

构建项目的基本骨架

  • 首先我们要搭建出一个符合Maven约定的目录来,这里大致有两种方式,第一种:

  1. 第一种使用命令行手动构建一个maven结构的目录,当然我基本不会这样构建

mvn archetype:generate -DgroupId=com.suny.seckill -DartifactId=seckill -Dpackage=com.suny.seckill -Dversion=

这里要注意的是使用archetype:generate进行创建,在Maven老版本中是使用archetype:create,现在这种方法已经被弃用了,所以使用命令行创建的话注意了,稍微解释下这段语句的意思,就是构建一个一个maven-archetype-webapp骨架的Webapp项目,然后groupIdcom.suny.seckill,artifactIdseckill,这里是Maven相关知识,可以按照自己的情况进行修改

2.第二种直接在IDE中进行创建,这里以IDEA为例

  • 点击左上角File

  • 然后在里面勾选Create from archetype,然后再往下拉找到org.apache.cocoon:cocoon-22-archetype-webapp,选中它,注意要先勾选那个选项,否则选择不了,然后点击Next继续

img

+然后就填写你的Maven的那几个重要的坐标了,自己看着填吧

img

+再就配置你的Maven的相关信息,默认应该是配置好的

img

+之后就是点Finsh,到此不出意外的话就应该创建成功了

构建pom文件

项目基本的骨架我们就创建出来了,接下来我们要添加一些基本的JAR包的依赖,也就是在pom.xml中添加各种开源组件的三坐标了

<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/maven-v4_0_0.xsd">

建立数据库

在根目录下有一个sql文件夹里面有一个sql数据库脚本,如果你不想自己手写的话就直接导入到你的数据库里面去吧,不过还是建议自己手写一遍加深印象

-- 整个项目的数据库脚本

在建立数据库的,如果按照我这里的数据库脚本建立的话应该是没问题的,但是我按照视频里面的数据库脚本建表的话发生了一个错误

img

这个报错看起来比较的诡异,我仔细检查sql也没有错误,它总提示我end_time要有一个默认的值,可我记得我以前就不会这样,然后视频里面也没有执行错误,然后我感觉可能时MySQL版本的差异,我查看了下我数据库版本,在登录Mysql控制台后输入指令,在控制台的我暂时知道的有两种方式:

select 

我的输出结果如下:

img

进控制台就已经可以看到版本了,我的Mysql是5.7的,以前我用的时5.6的,然后去Google上搜索了下,找到了几个答案,参考链接:

  • 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不了的同学,可以这样写:

COMMENT 
  • 关于timestamp的问题,需要先运行 set explicit_defaults_for_timestamp = 1,否则会报invalid default value错误

  • 还需要注意的是SQL版本的问题会导致视频中seckill表创建会出错。只要将create_time放在start_time和end_time之前是方便的解决方法。

对比下我修改过后的跟视频里面的sql片段:

img

我们可以看到在这三个字段有一个小差别,那就是给start_time,end_time,create_time三个字段都添加一个默认值,然后执行数据库语句就没问题了


这里我们需要修改下`web.xml`中的servlet版本为`3.0`

打开WEB-INF下的web.xml,修改为以下代码:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"metadata-complete="true">

修改的原因有以下几点:

  • 高版本的Servlet支持更多的特性,更方便我们的Coding,特别是支持注解这一特性

  • Servlet2.3中新加入了Listener接口的实现,,我们可以使用Listener引入SpringContextLoaderListener

举个栗子:

  • Servlet2.3以前我们这样配置ContextLoaderListener:

<servlet>
  • Servlet2.3以后可以使用Listener配置,也就是我们项目中使用的方法

<listener>

两种方法的效果都是一样的,主要不要同时使用,否则会报错的

建立实体类

  • 首先建立SuccessKilled 秒杀状态表

package com.suny.entity;
  • 再建立Seckill 秒杀商品信息

package com.suny.entity;

对实体类创建对应的mapper接口,也就是dao接口类

  • 首先创建SeckillMapper,在我这里位于com.suny.dao包下

package com.suny.dao;
  • 再创建SuccessKilledMapper

package com.suny.dao;

接下来书写xml配置文件

建立对应的`mapper.xml`

首先在src/main/resources建立com.suny.dao这个包,也就是对应mapper接口文件包一样的包名,这样符合Maven的约定,就是资源放置在Resource包下,Java包下则是放置java类文件,编译后最后还是会在同一个目录下

img
  • 首先建立SeckillMapper.xml

mapper       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  • 建立SuccessKilledMapper.xml

mapper       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  • 建立Mybatis的配置文件mybatis-config.xml

<?xml  version="1.0" encoding="UTF-8" ?>
  • 然后建立连接数据库的配置文件jdbc.properties,这里的属性要根据自己的需要去进行修改,切勿直接复制使用

jdbc.driver=com.mysql.jdbc.Driverjdbc.user=rootjdbc.password=rootjdbc.url=jdbc:mysql://localhost:3306/seckill?useUnicode=true&characterEncoding=utf-8
  • 建立Springdao的配置文件,在resources包下创建applicationContext-dao.xml

<?xml  version="1.0" encoding="UTF-8"?>
  • 基础的部分我们搭建完成了,然后要开始测试了 在IDEA里面有一个快速建立测试的快捷键Ctrl+Shift+T,在某个要测试的类里面按下这个快捷键就会出现Create new Test,然后选择你要测试的方法跟测试的工具就可以了,这里我们使用Junit作为测试

    建立SeckillMapperTest文件,代码如下

package com.suny.dao;

测试中可能会出现Mybatis参数绑定失败的错误,在mapper接口中的方法里面添加@Param的注解,显示的告诉mybatis参数的名称是什么,例如

List

PS:如果觉得我的分享不错,欢迎大家随手点赞、转发。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

如果你喜欢这篇文章,喜欢,转发。

生活很美好,明天见(。・ω・。)ノ♡

batocera中文整合包_分享一个整合 SSM 框架的高并发和商品秒杀项目相关推荐

  1. api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享

    前言: 一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API 源码获取:关注头条号转发文章之后私信[秒杀]查看源码获取方式! 项目的来源 项目的来源于国内IT ...

  2. termux无法安装引导程序包_分享一个小玩意儿Termux

    前言 说一个有意思的事情 父亲节那天,把微信中仅剩的三十一块五毛钱转给了老爸. 老爸收到后,很感动,转回了200. 也许这就是父爱吧. 一 老规矩,上次的面试题(不保证正确性,自己判断) 1.判断 1 ...

  3. batocera游戏整合包_安装游戏时电脑报错?提示XXX文件缺失?一个软件完美解决...

    文中所包含软件的下载方式在评论区. 适用场景:如下图,运行软件或者游戏时弹出错误提示,提示XXX缺失. 报错原因:电脑缺少软件或游戏运行所必须的运行库(Runtime),这在windows用户中很常见 ...

  4. batocera游戏整合包_星露谷物语绅士mod整合包

    星露谷物语绅士mod整合包是一款界面设计风格十分經典的经营类游戏,在这儿你可能感受到农村生活的乐趣,玩家能够随意的去探寻各种各样游戏玩法,你可以去栽种各种各样绿色植物,也有丰富多彩的資源获得哦,一年四 ...

  5. 我的世界java版怎么加整合包_我的世界1.9MOD简单整合下载 功能性懒人包

    我的世界1.9已经有不少mod推出了,今天给大家带来的这个1.9mod简单整合是一个整合了forge和目前推出的一些简单功能性mod,并且玩家们可以在这个基础上自主添加新mod的特殊整合,这个整合应该 ...

  6. 神奇宝贝java_我的世界下载 1.25神奇宝贝整合包_单机游戏下载

    我的世界是一款开放性极高的游戏,在这款游戏中你能自己创造任何东西.正因为这款游戏的无限创意性,使得这款只有一两百兆的小游戏一举超于许多的大作,赢得极高的人气.也因为游戏的创造性,让许多玩家热衷于制作各 ...

  7. 我的世界java版怎么加整合包_我的世界整合包入门攻略 整合包怎么使用

    我的世界整合包入门攻略,由齐齐乐小白兔带来.有玩家问我的世界整合包怎么使用,不清楚的看下我的世界整合包入门攻略吧. java7和java8基本无区别. 对于整合包 1.7.2及以下的forge(包含部 ...

  8. 我的世界java版怎么加整合包_我的世界完美世界整合包

    软件介绍 我的世界完美世界整合包是一款综合评分完美的mod合集,装备拔刀剑在三个特色世界中击败世界BOSS穿越勇者的晋级之路,无数冒险家梦想的自由探险欢迎多人组队一起来挑战,兴趣极限满足你的好奇. 我 ...

  9. 我的世界java版怎么加整合包_我的世界怎么制作整合包

    冗余文件的清理 既然是制作较为纯净的整合包,这一步也很关键,在前面安装forge的过程中生成了很多垃圾文件,对于强迫症来说很难受,为了精简整合包的体积,我们得将其清理清理,以下用红框标注的皆为比较重要 ...

最新文章

  1. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )
  2. 【机器学习】通俗的决策树算法讲解和应用
  3. php跳出volist,thinkphpvolist
  4. python configuration is still_通过Python配置关闭Release优化
  5. 线段树--codevs 1690 开关灯
  6. 【Android】Android中ContentProvider组件详解
  7. [转载] python中的数组类型及特点
  8. (转) Arcgis for js之WKT和GEOMETRY的相互转换
  9. Android Service: 启动service, 停止service
  10. http的“无连接”指的是_头条一面:HTTP协议无状态中的 quot;状态quot; 到底指的是什么?...
  11. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(切比雪夫距离+multiset贪心+并查集)
  12. [论文笔记]Convolutional Neural Networks for Sentence Classification
  13. 二叉树前中后/层次遍历的递归与非递归形式(c++)
  14. 数据库可视化工具Navicat
  15. 数据仓库分层架构深度讲解
  16. Python3爬虫系列:理论+实验+爬取妹子图实战
  17. 【HUST】网安|编译原理实验|实验四攻略
  18. Mosquitto源码学习
  19. Centos 7.6 Install shc
  20. 手把手教你用VMware安装Centos7.9镜像(史上最详细)

热门文章

  1. 5G基站功耗,到底有多可怕?
  2. python爬虫我要个性网,获取头像
  3. android系统提供的几种颜色Color
  4. Gatling基本教程—1
  5. FPGA蜂鸣器播放音乐
  6. 离散化-利用计算机求解y=x,基于边缘的主动轮廓模型——从零到一用python实现snake...
  7. 虚拟机服务器登录,用虚拟机登录云服务器
  8. 最优化方法外罚函数法Matlab,最优化-罚函数法,乘子法
  9. 服务器磁盘raid0,raid1,raid10,raid5,raid50,raid6,raid60 分析与案例
  10. 三大前端框架技术选型对比