基于SSM框架实现的秒杀业务

基于ssm框架实现的秒杀业务 前言:这是一个基于ssm的项目 1,需求 1,原则 单个账号单个商品仅限购买一次(使用主键冲突来实现) 2

本文包含相关资料包-----> 点击直达获取<-------

基于ssm框架实现的秒杀业务

前言:这是一个基于ssm的项目

1.需求

1.原则
    单个账号单个商品仅限购买一次(使用主键冲突来实现)

2.前台展示
    PC端:按单品区分
    倒计时:结束时间和即将开始时间

3.后台设置内容
    开始时间、结束时间(PC端按单品设置、移动端按时间段设置)
    商品库存数量设置

4.功能逻辑
    库存锁定(拖取商品后,原商品库存减少)
    库存返还(活动结束后,剩余库存返还至原商品)
    同一个用户购买一次后变更立即购买按钮,移除或变灰不可点

5.并发优化
    使用redis缓存数据优化,超时的基础上一致性维护
    调整数据库操作语句顺序
    事务SQL在数据库中执行(存储过程),因为本地执行sql速度很快,减少GC的影响

1.1使用工具:

maven(构建项目),git(版本控制工具),myeclipse(集成开发环境),junit(测试)

1.2技术栈:

spring,springmvc,mybatis(框架),mysql(数据库)
redis(缓存),bootstrap(页面),html,css,javascript,jquery(前端)

1.3数据库设计

``sql CREATE TABLE seckill ( seckill_id bigint(20) NOT NULL auto_increment COMMENT '商品库存id', name varchar(120) NOT NULL COMMENT '商品名称', number int(11) NOT NULL COMMENT '库存数量', create_time timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '创建时间', start_time timestamp NOT NULL default '0000-00-00 00:00:00' COMMENT '秒杀开启时间', end_time timestamp NOT NULL default '0000-00-00 00:00:00' COMMENT '秒杀结束时间', PRIMARY KEY ( seckill_id ), KEY idx_start_time ( start_time ), KEY idx_end_time ( end_time ), KEY idx_create_time ( create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='秒杀库存表';

CREATE TABLE success_killed ( seckill_id bigint(20) NOT NULL COMMENT '秒杀商品id', user_phone bigint(20) NOT NULL COMMENT '用户手机号', state tinyint(4) NOT NULL default '-1' COMMENT '状态标示:-1:无效 0:成功 1:已付款 2:已发货', create_time timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY ( seckill_id , user_phone ), KEY idx_create_time ( create_time ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表'; ```

建议养成手写sql语句的习惯, sql文件在 src/main/sql 中

2.实现

localhost:8080/seckill/list 显示秒杀商品列表

localhost:8080/{seckillId}/detail 显示商品详细

2.1秒杀的业务逻辑

代码:

```java public SeckillExecution executeSeckill(long seckillId, long userPhone, String md5) throws SeckillException, RepeatKillException, SeckillCloseException { if (md5 == null || !md5.equals(getMD5(seckillId))) { throw new SeckillException("seckill data rewrite"); } // 执行秒杀逻辑:减库存 + 记录购买行为 Date nowTime = new Date();

try {

    // 记录购买行为
    int insertCount = successKilledDao.insertSuccessKilled(seckillId,
            userPhone);
    // 唯一:seckillId, userPhone
    if (insertCount <= 0) {
        // 重复秒杀
        throw new RepeatKillException("seckill repeated");
    } else {
        // 减库存,热点商品竞争
        int updateCount = seckillDao.reduceNumber(seckillId, nowTime);
        if (updateCount <= 0) {
            // 没有更新到记录,秒杀结束
            throw new SeckillCloseException("seckill is closed");
        } else {
            // 秒杀成功
            SuccessKilled successKilled = successKilledDao
                    .queryByIdWithSeckill(seckillId, userPhone);
            return new SeckillExecution(seckillId,
                    SeckillStatEnum.SUCCESS, successKilled);
        }

    }

} catch (SeckillCloseException e1) {
    throw e1;
} catch (RepeatKillException e2) {
    throw e2;
} catch (Exception e) {
    logger.error(e.getMessage(), e);
    // 所有编译期异常转化为运行期异常
    throw new SeckillException("seckill inner error:" + e.getMessage());
}

} ```

2.2使用枚举表述常量数据字典

代码:

```java public enum SeckillStatEnum { SUCCESS(1, "秒杀成功"), END(0, "秒杀结束"), REPEAT_KILL(-1, "重复秒杀"), INNER_ERROR( -2, "系统异常"), DATA_REWRITE(-3, "数据篡改");

private int state;

private String stateInfo;

SeckillStatEnum(int state, String stateInfo) { this.state = state; this.stateInfo = stateInfo; }

public int getState() { return state; }

public String getStateInfo() { return stateInfo; }

public static SeckillStatEnum stateOf(int index) { for (SeckillStatEnum state : values()) { if (state.getState() == index) { return state; } } return null; }

} ```

2.3自定义秒杀异常

秒杀相关业务异常 三个方面:方法粒度,参数,返回类型(return 类型/异常)

  • RepeatKillException 重复秒杀异常

  • SeckillCloseException 秒杀关闭异常

  • SeckillException 秒杀异常

2.4事务

使用注解控制事务方法的优点

  • 1.开发团队达成一致约定,明确标注事务方法的编程风格

  • 2.保证事务方法的执行时间尽可能短,不要穿插其他网络风格操作RPC/HTTP 请求或者剥离到事务方法外部

  • 3.不是所有的方法都需要事务,如只有一条修改,只读操作不需要事务控制

2.5页面倒计时

使用countdown 插件

2.6安全

  • 当未开启秒杀时,用户访问不了秒杀的地址

  • 当开启秒杀时,才会暴露秒杀地址,秒杀地址结果MD5加密,同时使用盐值混淆,如果用户用第三方插件或手动修改数据,会抛出异常,阻止用户

项目源码 https://github.com/Tang-Cong/seckill

预览

参考文献

  • 基于SSM框架的资产证券化系统的设计与实现(西安电子科技大学·贾田田)
  • 基于微服务架构的秒杀系统服务端设计与实现(东南大学·徐冉)
  • 电子商城系统中订单模块与秒杀模块的设计与实现(南京大学·徐士川)
  • 基于SSH框架在线拍卖系统的分析与设计(北京邮电大学·陈旭)
  • 基于微服务架构的秒杀系统服务端设计与实现(东南大学·徐冉)
  • 基于SSM的分布式商城的设计与实现(中国地质大学(北京)·刘彤月)
  • 基于SSM的分布式商城的设计与实现(中国地质大学(北京)·刘彤月)
  • 基于SSM的分布式商城的设计与实现(中国地质大学(北京)·刘彤月)
  • 电子商城系统中订单模块与秒杀模块的设计与实现(南京大学·徐士川)
  • 基于微服务架构之电商秒杀系统的设计与实现(华东师范大学·闫保正)
  • 基于微服务架构之电商秒杀系统的设计与实现(华东师范大学·闫保正)
  • 基于MVC模式的水利服务平台系统的设计与实现(中山大学·罗晴文)
  • 基于SSM企业级框架的微信公众平台构建——以航拍服务号为例(广西大学·吴海周)
  • 基于REST的农业旅游园区系统的设计与实现(河北农业大学·钤程程)
  • 基于微服务架构之电商秒杀系统的设计与实现(华东师范大学·闫保正)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计货栈 ,原文地址:https://bishedaima.com/yuanma/35660.html

相关推荐

  • 基于SpringBoot框架的宠物咖啡馆平台

    这是一套采用Java语言构建的宠物咖啡馆管理平台源代码,基于流行的SpringBoot框架,我们运用了SpringBoot与Vue技术栈进行开发,支持在Idea或Eclipse环境下运行
    2024年05月23日
    4 1 1
  • 基于SpringBoot框架的学生网上请假系统

    这是一套采用Java编程语言,基于SpringBoot框架构建的在线学生请假系统源代码,该项目运用了SpringBoot和Vue技术栈,开发工具为Idea或Eclipse
    2024年05月23日
    10 1 2
  • 基于Python开发早教管理系统

    金宝贝早教中心管理系统 一,摘 要 近年来,家长对孩子的教育问题愈加重视,倡导启蒙教育,因此,许多早教机构应运而生,而随着就够人员的增多,机构的管理成为重中之重
    2024年05月14日
    2 1 1
  • 基于Python的信息检索课程设计

    基于Python的信息检索课程设计 sdu视点新闻 全站爬虫爬取+索引构建+搜索引擎查询练习程序 爬虫功能使用Python的scrapy库实现
    2024年05月14日
    5 1 1
  • 奇异值分解

    奇异值分解(SVD)及其扩展详解 本文算法主要考虑个性化推荐领域 1,Matrix Factorization Model 和 Baseline Predictors SVD 其实就是 Matrix Factorization Model 和 Baseline Predictor 的结合
    2024年05月14日
    3 1 1
  • 基于JAVA实现的超级马里奥(Super Mario)游戏

    基于JAVA实现的超级马里奥(Super Mario)游戏 一,项目简介 刚进入的时候会有一个界面,为地图编辑器,可以使用此编辑器进行地图编辑,地图编辑器的内容包括:关卡
    2024年05月14日
    17 1 2
  • 基于JSP和SSH框架实现的班级管理系统

    基于JSP和SSH框架实现的班级管理系统 1 系统需求的分析 1,1 需求分析 本项目所开发的班级管理系统完成学校对学生的班级信息的统计与管理
    2024年05月14日
    9 1 2
  • 基于Python制作一个简单的滑雪游戏

    Python 制作小游戏(四) 导语 本期我们将制作一个简单的滑雪游戏, 废话不多说,让我们愉快地开始吧~ 开发工具 Python 版本: 3
    2024年05月14日
    35 1 4
  • 基于Java+SSH的在线教学交流平台、基于JavaWeb的在线教学交流平台

    在当今信息化时代,教育行业迎来了数字化转型的浪潮,基于Java+SSH框架(struts2+spring+hibernate)的在线教学交流平台应运而生,本研究旨在设计和开发一个全面的师生学习交流平台
    2024年05月07日
    12 1 4
  • ssm架构

    dfhxtxtxr 更富有创意天大鱼大肉的v不管成功发行股份幸福感新股发行发光效果如下如果想让共享富贵下功夫的人地广人稀官方唱歌唱歌唱歌的一天的火锅吃瓜吃瓜他的烟台大樱桃一天到黑哥唱歌唱歌的泰国第一天衬托出同样的态度一天的太阳媳妇关心他人 参考文献 基于SSM框架的B2C电商平台的设计与实现(华东交通大学·卢庆胜) 基于SSVH框架的综合集中告警WEB系统的研究与实现(西南交通大学·蔚晓娟) 基于Struts和Hibernate的J2EE Web应用的研究与实现(华东师范大学·张国梁) 基于SSM框架的投资项目经济评价系统分析与实现(山东大学·白春强) 基于SSM的综合医养平台的设计与实现(吉林大学·宋恩旭) 基于轻量级J2EE架构的工程管理信息系统的设计与实现(暨南大学·谢运佳) 基于SSM的综合医养平台的设计与实现(吉林大学·宋恩旭) 基于B/S结构的汽车营销服务管理系统的研究与实现(武汉科技大学·王恒青) 基于SSM框架的资产证券化系统的设计与实现(西安电子科技大学·贾田田) 基于SSI框架的开发配置管理系统的设计与实现(山东大学·冯峰) 基于J2EE/UML的企业建模系统的研究(浙江大学·丁勇) 基于OAuth2
    2024年05月14日
    8 1 2

发表回复

登录后才能评论