javaweb--商城秒杀项目(一)

一、项目简介
使用技术:1.SpringBoot+mybatis+redis+RabbitMq+thymeleaf
功能:
1.springBoot的环境搭建
2.集成Thtmeleaf,Result结果封装
3.集成 mybatis+Druid
4.集成Jedis+Redis的安装,通用缓存key封装
登陆 数据库的设计 明文密码的两次md5 jsr303参数校验 +全局异常处理器 分布式session
Jmeter 压测 自动以变量模拟多次用户
页面优化技术:
页面缓存 +URL缓存+对象缓存
5.页面静态化,前后端分离
6.资源静态化
.cdn
7接口优化 异步下单
8redis预减库存 减少数据库的访问
内存标记减少redis的访问
RabbitMQ队列缓冲,异步下单,增强用户体验
RabbitMQ安装与springBoot集成

二、功能实现
1.实现用户登陆

/**
 * @Author:zhangyx
 * @Date:Created in 22:182018/11/13
 * @Modified By:
 */
@Controller
@RequestMapping("/login")
public class LoginController {

    @Autowired
    MiaoshaUserService miaoshaUserService;
    @Autowired
    private RedisService redisService;

    //日志
    private static Logger log= LoggerFactory.getLogger(LoginController.class);
    @RequestMapping("/to_login")
    public String toLogin(){
        return "login";
    }

    @RequestMapping("/do_login")
    @ResponseBody
    public Result<Boolean> doLogin(HttpServletResponse response, LoginVo loginVo){
        //log.info(loginVo.toString());
        System.out.println(loginVo.toString());
        //参数校验
        String passinput=loginVo.getPassword();
        String mobile=loginVo.getMobile();
        if(StringUtils.isEmpty(passinput)){
            //return Result.error(CodeMsg.PASSWORD_EMPTY);
            throw new GlobelException(CodeMsg.PASSWORD_EMPTY);
        }
        if(StringUtils.isEmpty(mobile)){
            //return Result.error(CodeMsg.MOBILE_EMPTY);
            throw new GlobelException(CodeMsg.MOBILE_EMPTY);
        }

        if(!ValidatorUtil.isMobile(mobile)){
           // return Result.error(CodeMsg.MOBILE_ERROR);
            throw new GlobelException(CodeMsg.MOBILE_ERROR);
        }
       miaoshaUserService.login(response,loginVo);
        return Result.success(true);

三、登陆时加密功能
加密使用md5进行加密:
1.用户端:PASSWORD=MD5(明文+固定的Salt)
2.服务端:PASSWORD=MD5(用户输入的+随机salt)

/**
 * @Author:zhangyx
 * @Date:Created in 22:062018/11/13
 * @Modified By:
 */
public class MD5Util {
    public static String md5(String src){
        return DigestUtils.md2Hex(src);
    }
    private static final String salt="1a2b3c4d";
    public static String inputPassToFromPass(String inputPass){
String str=""+salt.charAt(0)+salt.charAt(2)+inputPass+salt.charAt(5)+salt.charAt(4);
return md5(str);
    }

    public static String formPassToDbPass(String input,String salt){
        String frompass=inputPassToFromPass(input);
        String dbpass=""+salt.charAt(0)+salt.charAt(2)+frompass+salt.charAt(5)+salt.charAt(4);
        return dbpass;
    }

    public static void main(String[] args) {
        String s=MD5Util.formPassToDbPass("123456","1a2b3c4d");
        System.out.println(s);
    }
}
慕课网Java高并发秒杀(课程) 很好的spring,springMVC,mybatis,bootstrap,jQuery,mysql,Restful学习案例 SQL脚本 CREATE DATABASE seckill; USE seckill; -- todo:mysql Ver 5.7.12for Linux(x86_64)中一个表只能有一个TIMESTAMP CREATE TABLE seckill( `seckill_id` BIGINT NOT NUll AUTO_INCREMENT COMMENT '商品库存ID', `name` VARCHAR(120) NOT NULL COMMENT '商品名称', `number` int NOT NULL COMMENT '库存数量', `start_time` TIMESTAMP NOT NULL COMMENT '秒杀开始时间', `end_time` DATETIME NOT NULL COMMENT '秒杀结束时间', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 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 AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='秒杀库存表'; -- 初始化数据 INSERT into seckill(name,number,start_time,end_time) VALUES ('3000元秒杀iphone6',100,'2016-01-01 00:00:00','2016-12-31 00:00:00'), ('2000元秒杀ipad',100,'2016-01-01 00:00:00','2016-05-01 00:00:00'), ('6000元秒杀mac book pro',100,'2016-07-01 00:00:00','2016-12-31 00:00:00'), ('7000元秒杀iMac',100,'2016-05-01 00:00:00','2016-12-31 00:00:00') -- 秒杀成功明细表 -- 用户登录认证相关信息(简化为手机号) CREATE TABLE success_killed( `seckill_id` BIGINT NOT NULL COMMENT '秒杀商品ID', `user_phone` BIGINT NOT NULL COMMENT '用户手机号', `state` TINYINT NOT NULL DEFAULT -1 COMMENT '状态标识:-1:无效 0:成功 1:已付款 2:已发货', `create_time` TIMESTAMP NOT NULL COMMENT '创建时间', PRIMARY KEY(seckill_id,user_phone),/*联合主键*/ KEY idx_create_time(create_time) )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表' SHOW CREATE TABLE seckill\G;#显示表的创建信息 Mybatis两个问题?①sql写在哪里?②怎么实现DAO接口?第一个问题:注解或者XML选择XML.第二个问题:Mapper自动实现DAO接口或者API编程方式实现DAO接口.选择Mapper.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值