springboot集成开发实现商场秒杀

加入主要依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>
  5. <!-- alibaba的druid数据库连接池 -->
  6. <dependency>
  7. <groupId>com.alibaba</groupId>
  8. <artifactId>druid</artifactId>
  9. <version>1.0.5</version>
  10. </dependency>
  11. <!-- redis客服端-->
  12. <dependency>
  13. <groupId>redis.clients</groupId>
  14. <artifactId>jedis</artifactId>
  15. </dependency>
  16. <dependency>
  17. <groupId>com.alibaba</groupId>
  18. <artifactId>fastjson</artifactId>
  19. <version>1.2.38</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>commons-codec</groupId>
  23. <artifactId>commons-codec</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-validation</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-amqp</artifactId>
  32. </dependency>
  33. <dependency>
  34. <groupId>com.google.guava</groupId>
  35. <artifactId>guava</artifactId>
  36. <version>19.0</version>

秒杀项目主要目录构架

1.java目录

config 所有的配置信息

controller

exception 所有业务异常

mapper

service

rabbitmq

redis redis缓存

validator 后端校验

bean:数据传输层包括:mysql以及redis

util:工具包

dto:数据传输对象

秒杀系统逻辑

实现技术点

1.MD5

实现用户的密码为加密在保存到数据库之前

2.全局异常统一处理

通过拦截所有异常,对各种异常进行相应的处理

3.页面缓存

通过手动渲染的html页面缓存到redis中

  1. WebContext ctx = new WebContext(request, response, request.getServletContext(), request.getLocale(), model.asMap());
  2. html = thymeleafViewResolver.getTemplateEngine().process("goods_detail", ctx);

4.解决了超买

application.properties配置

  1. #thymeleaf
  2. spring.thymeleaf.cache=false
  3. spring.thymeleaf.check-template=true
  4. spring.thymeleaf.check-template-location=true
  5. spring.thymeleaf.servlet.content-type=text/html
  6. spring.thymeleaf.enabled=true
  7. spring.thymeleaf.encoding=utf-8
  8. spring.thymeleaf.mode=HTML5
  9. spring.thymeleaf.prefix=classpath:/templates/
  10. spring.thymeleaf.suffix=.html
  11.  
  12. # mybatis
  13. mybatis.type-aliases-package=com.jesper.seckill.mapper
  14. mybatis.configuration.map-underscore-to-camel-case=true
  15. mybatis.configuration.default-fetch-size=100
  16. mybatis.configuration.default-statement-timeout=3000
  17. mybatis.mapperLocations = classpath:com/jesper/seckill/mapper/*.xml
  18. # druid
  19. spring.datasource.url=jdbc:mysql://localhost:3306/seckill?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=UTC
  20. spring.datasource.username=root
  21. spring.datasource.password=root
  22. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  23. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  24. spring.datasource.filters=stat
  25. spring.datasource.maxActive=1000
  26. spring.datasource.initialSize=100
  27. spring.datasource.maxWait=60000
  28. spring.datasource.minIdle=500
  29. spring.datasource.timeBetweenEvictionRunsMillis=60000
  30. spring.datasource.minEvictableIdleTimeMillis=300000
  31. spring.datasource.validationQuery=select 'x'
  32. spring.datasource.testWhileIdle=true
  33. spring.datasource.testOnBorrow=false
  34. spring.datasource.testOnReturn=false
  35. spring.datasource.poolPreparedStatements=true
  36. spring.datasource.maxOpenPreparedStatements=20
  37. #redis
  38. redis.host=127.0.0.1
  39. redis.port=6379
  40. redis.timeout=10
  41. redis.poolMaxTotal=1000
  42. redis.poolMaxIdle=500
  43. redis.poolMaxWait=500
  44. #static
  45. spring.resources.add-mappings=true
  46. spring.resources.cache.period= 3600
  47. spring.resources.chain.cache=true
  48. spring.resources.chain.enabled=true
  49. spring.resources.chain.compressed=true
  50. spring.resources.chain.html-application-cache=true
  51. spring.resources.static-locations=classpath:/static/
  52.  
  53. #rabbitmq
  54. spring.rabbitmq.host=127.0.0.1
  55. spring.rabbitmq.port=5672
  56. spring.rabbitmq.username=guest
  57. spring.rabbitmq.password=guest
  58. spring.rabbitmq.virtual-host=/
  59. spring.rabbitmq.listener.simple.concurrency= 10
  60. spring.rabbitmq.listener.simple.max-concurrency= 10
  61. spring.rabbitmq.listener.simple.prefetch= 1
  62. spring.rabbitmq.listener.simple.auto-startup=true
  63. spring.rabbitmq.listener.simple.default-requeue-rejected= true
  64. spring.rabbitmq.template.retry.enabled=true
  65. spring.rabbitmq.template.retry.initial-interval=1000
  66. spring.rabbitmq.template.retry.max-attempts=3
  67. spring.rabbitmq.template.retry.max-interval=10000
  68. spring.rabbitmq.template.retry.multiplier=1.0

————————————————

本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。
传送门:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ

springboot集成实现秒杀的更多相关文章

  1. 【springBoot】springBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  2. SpringBoot集成security

    本文就SpringBoot集成Security的使用步骤做出解释说明.

  3. springboot集成Actuator

    Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...

  4. SpringBoot集成Shiro并用MongoDB做Session存储

    之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...

  5. SpringBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  6. springboot集成mybatis(二)

    上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...

  7. springboot集成mybatis(一)

    MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...

  8. springboot集成redis(mybatis、分布式session)

    安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...

  9. SpringBoot集成jsp

    一.springBoot集成jsp: 1.修改pom文件 <!--集成jsp所需jar包--> <!--jsp页面使用jstl标签--> <dependency> ...

随机推荐

  1. Docker的安装和操作(虚拟机+linux系统)

    1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这 ...

  2. ASP.NET MVC入门到精通——MVC请求管道

    https://www.cnblogs.com/jiekzou/p/4896315.html 本系列目录:ASP.NET MVC4入门到精通系列目录汇总 ASP.NET MVC的请求管道和ASP.NE ...

  3. AcWing 891. Nim游戏

    //a1 ^ a2 ^ ··· ^ an = 0 –>先手必败: //a1 ^ a2 ^ ··· ^ an != 0 –>先手必胜: #include<iostream> us ...

  4. Ajax返回值一直获取不到啊

      原理: 同步异步的问题 Return 位置的问题     首先同步异步改为async : false,   Return 的值写在ajax外部  function submit_answer(){ ...

  5. EF简单的CodeFirst示例(自己创建数据库,不使用数据迁移)

    1.新建一个控制台应用程序 2.右键引用--管理NuGet程序包,安装如下几项 3.打开App.config文件,加入如下代码: <connectionStrings>    <ad ...

  6. [Codechef CHSTR] Chef and String - 后缀数组

    [Codechef CHSTR] Chef and String Description 每次询问 \(S\) 的子串中,选出 \(k\) 个相同子串的方案有多少种. Solution 本题要求不是很 ...

  7. Java-重载和重写区别剖析

    重载(Overload)和重写(Override)是任何一门面向对象的语言都会具有的两个特性,自然,Java语言中也具有此两种特性.但是,对于Java新手,或者没有面向对象语言经验的开发者而言,这会是 ...

  8. 调用系统计算器n次

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void main1(){ int n ...

  9. 经常使用的cmd命令

    ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库中的属性以控制启动加载.CACLS 显示或修改文 ...

  10. Python—网络通信编程之tcp非阻塞通信(socketserver)

    服务端代码 import socketserver # 定义一个类 class MyServer(socketserver.BaseRequestHandler): # 如果handle方法出现报错, ...