一个基于SSM框架开发的高并发电商秒杀Web系统

0 前言

一个基于SSM框架的高并发秒杀系统采用IDEA+Maven+SSM+Mysql+Redis+Jetty、Bootstrap/Jquery开发。

通过这个小项目,理清了基于SSM框架开发Web应用的流程以及常见的避坑方法,并在最后简单采用了Redis缓存以及Mysql Procedure对项目进行了高并发优化。

接下来从DAO层、Service层、Web层开发以及高并发优化4个方面梳理整个项目开发过程。

源码地址https://github.com/Allegr0/seckill

项目准备;

新建工程,用maven组织框架,从archtype:webapp中新建,在pom.xml添加相关依赖。修改默认web.xml中的servlet支持版本为3.1,在pom.xml添加项目所需依赖,并添加jetty服务器插件

1 DAO层相关开发

1.1 数据库设计与编码

  数据库DDL在main/sql/schema.sql,这里采用纯手写DDL的方式创建数据库,这样的良好习惯相当于对每次数据库的改动都留下记录,方便了项目后期维护。

1.2 DAO实体与接口编码

  分别放在org/seckill/entity目录下和org/seckill/dao目录下。  数据库中的Table <--> JavaPOJO类 Entity 是一对一的关系,数据库表对应实体类,数据库表中的列对应实体类的属性。

  由于我们采用Mybatis ORM框架,所以这里dao目录下只存放接口以及抽象方法,描述功能,具体的SQL在Mybatis的Mapper中实现。

1.3 基于Mybatis实现DAO

  Mybatis相当于其他ORM框架的优点:采用XML提供SQL,提供了足够的灵活性,Mapper自动实现DAO接口方法,并将结果自动集映射到javaPOJO。

  配置resources/mybatis-config.xml配置文件。一些mybatis特性的全局属性(使用列别名替换列名、驼峰命名转换)可以自动的把sql中的下划线命名形式转为java中的驼峰命名形式,例如:create_time (sql)<—> createTime (java)。

  在resources/mapper目录下写xml(sql语句),对应DAO中接口定义的所有抽象方法 tips:(注意Xml标签转义字符 <![CDATA[ <= ]]>、联合主键的使用、insert ignore技巧)

1.4 基于Spring托管Mybatissqlsessfactory对象

  在resources/spring 目录下编写spring-dao.xml的配置文件(注意这里jdbc.properties 最好用jdbc.username不能直接用username,否则会报错),向Spring IOC中装配dao层所需要的bean,包括数据库连接池、mybatis很关键的sqlsessionfactory对象,以及扫描DAO接口实现类并注入进IOC。

1.5 DAO层单元测试

  用command+shift+T 生成junit单元测试类,并测试。 tips:bean的自动注入用两种方法@Resource、@Autowired 。一个是按名称、一个是按类型。

  单元测试的时候有一个小坑: 异常:org.apache.ibatis.binding.BindingException。由于 DAO接口参数 -> XML SQL参数绑定的时候,由于java没有保存形参的记录。queryAll(int offset, int limit) —> querryAll(arg0, arg1),当有多个参数的时候会出现找不到参数的问题。 所以在DAO层的接口函数参数前要标注@param(“参数名") 例如:queryAll(@Param("offset") int offset, @Param("limit") int limit);

1.6 总结

  由于采用了MybatisORM框架,DAO层工作演变为:接口设计+SQL编写。代码和SQL分离,方便后期review。

  DAO层只实现相关数据库的增删改查基本功能,具体的DAO拼接等复杂逻辑在Service层完成。

2 Service层相关开发

2.1 准备工作:新建dto、exception、service三个package

  dto:数据传输层,存放一些表示数据的类型。dto和entity较像,entity是业务(数据库Table)的封装,dto是关注web和service之间的数据传递,dto层还包括了json格式的封装类。

  spring声明式事务只接收RuntimeException(运行期异常),只对运行期异常进行回滚。

2.2 秒杀Service接口设计(站在“使用者”的角度设计)

  service/SeckillService.java  秒杀接口包含4个方法:查询全部秒杀记录、查询单个秒杀记录、暴露秒杀地址、执行秒杀。配合接口中的方法,要同时设计好dto类以及异常类。

2.3 秒杀Service接口实现

  service/impl/SeckillServiceImpl.java 。新建枚举类enums/SeckillStateEnum 存放状态,状态信息对应的常量。

  在IntelliJ idea 2017.2 中@Resourse 或者 @Autowired出现警告或者错误提示(Could not autowire. no beans of "XXX" type found.). 但是程序运行无误。可以在IDEA中配置降低此类问题的警告级别。

2.4 基于Spring托管Service实现类

   在resources/spring 目录下编写spring-service配置文件,以便向IOC装配service层的bean。通过

<!--扫描service包下所有使用注解的类型-->
<context:component-scan base-package="org.seckill.service"/>

  扫描类包,将所有标注Spring注解的@Component、@Service、@Controller、@Respository的类自动转换为bean并注入到IOC容器中,同时对代码中标注了@Autowired、@Resource的方法或成员变量根据名称或类型进行依赖注入。

2.5  使用Spring声明式事务

  Spring声明式事务有两种常见的用法:1) tx:advice+aop命名空间,一次配置永久生效。2) @Transcational,通过注解标注需要事务的方法。

  不是所有方法都需要事务,如只有一条修改操作、只读操作不要事务控制,所以这里建议用注解控制(@Transcational)的方式标注需要事务的方法,而不建议采用tx-advice+aop命名空间对所有方法都标注事务。个人理解:当有两条以上的修改操作或select for update,才需要事务,这个还需要进一步学习mysql行级锁。

  标注了@Transcational方法,开启一个事务,再最后return或者throw RuntimeException时才commit或rollback

在spring-service.xml配置事务管理器,配置基于注解的声明式事务。

2.6 集成测试

   slf4j接口的实现类logback配置:resources/logback.xml。在需要使用的测试类前声明logger变量

private final Logger logger = LoggerFactory.getLogger(this.getClass());

3 Web层相关开发

3.1 Restful接口与SpringMVC概述

  REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标准,是一种思想。

Restful架构:(1) 每一个URI代表一种资源。(2) 客户端和服务器之间,传递这种资源的某种表现层;(3) 客户端通过四个HTTP动词,队伍段资源进行操作,实现“表现层状态转化”。

  由于篇幅原因,在这里就不对Restful接口进行详细介绍

  Spring MVC框架原理

  

原文地址:https://www.cnblogs.com/kukri/p/9027813.html

时间: 2024-10-28 20:51:41

一个基于SSM框架开发的高并发电商秒杀Web系统的相关文章

基于ssm框架开发的零食商城源码

很多朋友说要分享一些基于ssm框架开发的项目,在休闲时间搭建和撸一个以ssm框架开发的零食商城源码,详情如下,希望大家能够见解和学习. 首先ssm定义是框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容),在开发上前后分离,耦合度小,且开发方便快速,效率较高.大家可以把我分享的项目下载下来二次学习或者开发,同时也可用于毕设. 系统分为前后太两大部分,包含管理员.普通用户权限,具有一系列的包含权限,用户信息,商品信息,订单信息,个人中新,购物车下

基于SSM框架下的B/S试卷质量网上综合评价系统

每天记录学习,每天会有好心情.*^_^* 今天和一个朋友共同完成了一个试卷质量网上综合评价系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架.我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他.和往常一样选用简单又便捷的MYECLIPSE作为开发工具,这是一个 后台项目.这个系统的介绍是这样的:为了完善高校试卷质量综合评价体系,提出构建一个基于B/S构架体系的综合评价系统,以提升教学管理水平.该系统的设计围绕四个主要分析和评价指标的算法展开,通过对算法公式的分析与比较,验证评

基于SSM框架下的JAVA制造业企业工料报废统计系统

最近了解了制造业企业工料报废统计项目,在这个平台记录一下这个制造业企业工料报废统计项目,方便以后再次使用或学习的时候能够及时的翻阅.在完成这个项目的时候,考虑了很多框架.最终决定选用SSM(MYECLIPSE),该框架具有极强的移植性,多平台性,便于操作性等优点.此框架能在MYECLIPSE开发工具中完美的编写和运行,制造业企业工料报废统计为一个 后台项目.这个项目的描述是这样的:随着计算机技术的飞速发展,计算机在各行各业管理中应用的普及,利用计算机实现制造业经济效益管理势在必行.本系统是结合制

Java基于ssm框架的restful应用开发

Java基于ssm框架的restful应用开发 好几年都没写过java的应用了,这里记录下使用java ssm框架.jwt如何进行rest应用开发,文中会涉及到全局异常拦截处理.jwt校验.token拦截器等内容. 1.jwt工具类 直接贴代码了,主要包括jwt的sign.verify.decode三个方法,具体实现如下: package com.isoft.util; import java.util.Date; import com.auth0.jwt.JWT; import com.aut

基于SSM框架之宜立方商城项目——项目开始准备一(项目需求分析与设计)

网站概要需求 工作内容: 依照我方(我方公司)所述,遵循阿里巴巴网站.京东网站B2C商城内容进行设计开发,以确保实现类似京东网站.淘宝网站购物商城功能为目的,且网站预留B2B接口.项目开发方需提供给我方(我方公司)单体测试.结合测试.综合测试.覆盖率测试报告书,供我方审核 开发环境  操作系统要求:保障用户可以在Linux.Unix.WindowsNT.Windows2000.WindowsXP.Win7.Vista.DOS等操作系统中畅通访问我方(我方公司)主页且无任何技术问题出现.  数据库

SSM框架开发web项目系列(二) MyBatis真正的力量

前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBatis的基础内容,包括基本概念.开发步骤.使用实例等.说起MyBatis,工作中做过SSH/SSM相关Web开发的或者正在学习MyBatis的人或多或少都会接触到类似“MyBatis和Hibernate有什么区别?”,“MyBatis和Hibernate哪个更好?”,“为什么Mybatis用的人越来

基于SSM框架贺州学院校园二手交易平台设计与实现

注:毕业有一段时间了,这里了做一下当年毕设的经验分享. 绪论 随着中国新四大发明的诞生,网购成了千千万万网友们购物的新方式,新的购物方式促进商业的发展,但随着人们生活水平的提高,许多新购置的物品用了没多少天,甚至没多少次就开始嫌弃.就开始不再使用,成为了闲置物品,大量的闲置物品已然爆发式增长. 在网购人群中,学生网购已经是非常常见,随着购物的便捷,学生们四年下来手里头有着太多的闲置的废旧物,一到大四毕业季,学生离校时都会丢弃一些学习资料和生活用具,这些闲置的废旧物造成校园垃圾增长,给环境保洁员工

MapReduce教程(一)基于MapReduce框架开发&lt;转&gt;

1 MapReduce编程 1.1 MapReduce简介 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,用于解决海量数据的计算问题. MapReduce分成了两个部分: 1.映射(Mapping)对集合里的每个目标应用同一个操作.即,如果你想把表单里每个单元格乘以二,那么把这个函数单独地应用在每个单元格上的操作就属于mapping. 2.化简(Reducing)遍历集合中的元素来返回一个综合的结果.即,输出表单里一列数字的和这个任务属于reducing. 你向Ma

一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)

概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松.简单.放心全面学习(也不需要版本控制配置).下载后遇到任何问题,我将全力进行解答. 此项目:快编(kuaib)是一款方便快速全能的编辑系统,竭尽全力地将编写.查找.比对.修改.文件下载.上传.查重等所有功能整合于单个页面操作综合操作系统.--另外,此项目已部署:http://yws233.cn:80