有Java的地方,就有电商,有电商API接口
毫不夸张的说,市面上百分之七十的Java程序员的简历上都有一个项目叫做电子商城,前缀名可能不尽相同,但是本质一定是个电商平台;以至于很多小伙伴的简历千篇一律,面试官看到SSM的电商,我觉得都大概率会直接忽略甚至直接Kill你;但是为什么电商平台这么烂大街的情况下,还是无数培训机构对电商项目趋之如骛呢,那么这要从大型网站的定义说起,在我看来大型网站有一下几个要求:
NO. 1
高并发,流量大
一个网站从小做到大,业务越来越大,积累的用户也越来越多,那么网站的请求量就势必越来越大
NO. 2
高可用
大型网站有一个必须达到的标准,就是高可用。什么是高可用,就是假设服务器宕机了,这个时候用户就无法访问,我们必须保证网站稳定地向用户时不间断的服务,哪怕有服务器节点宕机了,这个时候备用机也会替换当前不可用的服务器节点,确保服务正常访问。
NO. 3
大数据
通过大量服务器以及存储系统管理海量数据,比如阿里在全国各地有上千甚至上万台服务节点。数据多了,那么就可以做大数据分析了,比如为每个画像,不论是用户购买习惯,还是用户未来预计会购买的商品,都能做到一步步的分析。当然图片数据也是数据,当你上传了图片,网站会通过人工智能来分析你论是人物图,风景图还是宠物图,都会做到精确的分析。
NO.4
敏捷开发,迭代快
大型网站的用户量必然是会很多的,为了提高用户体验,优化用户各类操作,形形色色的需求都会被产品人员提出,通过头脑风暴、研讨逐出一些非常好用的功能模块,与此同时,开发人员根据需求快速迭代,当然测试与运维也会跟进。一般来说1~2 周会快速迭代一次。
NO.5
用户体系庞大
既然一个大型网站的用户量是非常大的,那么这些用户不可能都分布在同一个地区,他们都是分散的个体,分布在全国各地,甚至全球各地。宝和物流,你可以把商品卖到很偏远的农村或者山区,当然这些偏远地也能通过网站把自家的特产,卖向全国各地。
NO. 6
可持续升级:
任何大型网站都不是一蹴而就的,都是从最初最简单的版本一步一步迭代起来的
NO. 7
安全防范
正所谓树大招风,你越牛叉,就愈会有黑客或者同行来攻击你,所以这对运维来说也有相当大的挑战,我们之前的网站就被黑客攻击勒索比特币,问题是因为服务器漏洞,比如上传图片,没有做到限制文件类型,只在前端判断,却没有在后端判断,导致黑客可以直接攻击Api接口,把PHP或者其他可植入脚务器运行,这是非常危险的。
NO. 8
弹性扩展
淘宝双11在并发量剧增的时候,可以通过增加服务器来扩容,从而引导剧增的流量;微博里若某明星结婚,流量也会剧增,这个时候服务器都是可加,来实现动态扩容。不需要的时候适当减少服务器就行
NO. 9
吞吐量高,响应速度快
一个系统数据量一旦大了,那么它的响应速度会比较慢,这会影响用户体验。所以一个大型网站也必须保证用户每次的请求响应是很这个网站背后可能有上百上千台服务器,但是对于用户来说是透明的,他是不知道的。
综合以上九点特点,我们不难看出,如果要在一个项目中穿插讲解Java基础到高级语法的全部内容,甚至包括基础的架构设计,并发处理,数据库优化等业务,电商平台是一个不二的选择,基于此,我选择也是很多小伙伴的选择,选择以大型的电商作为技能的提升训练项目;前置就这些,下面:我们正式开始吧!
后端技术选型
SpringBoot VS SpringMVC
1、SpringMVC是框架,SpringBoot是工具
2、从配置繁琐(xml)到零配置(yml)
3、SpringBoot集成了多样化的中间件【*-stater】
4、从外置tomcat变为内置tomcat
技术选型所要考虑的
1、切合业务 2、社区活跃度
3、团队技术水平 4、版本更新迭代周期
5、试错精神 6、安全性
7、成功案例 7、开源精神
项目的聚合工程设计
将服务拆分为多个子模块,搭建Maven聚合项目模式,实现类组件化开发,分别造轮子,使用父POM文件进行聚合,项目从设计层面实现松耦合以及模拟真实开发中分模块开发的业务场景,最终拼装相关子模块完成项目。
附图便是整个电商项目的聚合工程模块展示,所有子工程的pom依赖于父POM文件,整个项目的配置文件存放在api工程的resource文件夹下,API工程也是我们最终打包部署,开放给前端使用api接口项目,小伙伴们可以根据自己的需要和命名方式,调整整个聚合工程的设计结构
SpringBoot 主POM文件的配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath /> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
HikariCP数据源简述
SpringBoot 1.X---->SpringBoot 2.X升级之后,HikariCP便作为SpringBoot的默认数据源使用:Hikari在日语中时光的意思,形容它的快,附上一张官方的图来说明HikariCP的优秀吧,曾经如日中天的的BoneCP,然而,上MavenRepository()查找有没有最新版本的时候,你会发现最新的是2013年10月份的(这么久没新版本出来了?)。再来看看Bone的Githut,上看看最近有没有提交代码。却发现,BoneCP的作者对于这个项目貌似已经心灰意冷,说是要让步给HikariCP了,由此可见HiKariCP的强大,至于具体的到底有多快稳定如何,超时超连接数如何处理,有兴趣的小伙伴自行查询HiKariCP的官方文档。
数据层HikariCP与Mybatis的整合
引入POM文件:
<!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
引入yml配置:
############################################################## 配置数据源信息#############################################################spring: profiles: active: prod datasource: # 数据源的相关配置 type: com.zaxxer.hikari.HikariDataSource # 数据源类型:HikariCP driver-class-name: com.mysql.jdbc.Driver # mysql驱动 url: jdbc:mysql://localhost:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect&useSSL=false username: root password: root hikari: connection-timeout: 30000 # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQ minimum-idle: 5 # 最小连接数 maximum-pool-size: 20 # 最大连接数 auto-commit: true # 自动提交 idle-timeout: 600000 # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟 pool-name: DateSourceHikariCP # 连接池名字 max-lifetime: 1800000 # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 connection-test-query: SELECT 1 servlet: multipart: max-file-size: 512000 # 文件上传大小限制为500kb max-request-size: 512000 # 请求大小限制到500kb############################################################## web访问端口号 约定:8088#############################################################server: tomcat: uri-encoding: UTF-8 max-http-header-size: 80KB port: 8088
install
Maven聚合工程在修改配置文件,或者修改多个模块代码之后,建议使用Maven Install进行重新聚合,保证代码更新