2006-京淘Day01
1. 京淘项目环境搭建
1.1 JDK配置
1.1.1 JDK环境说明
在cmd中查看jdk的版本,步骤如图所示:
1.1.2 JDK环境变量配置
在此电脑右键/属性/高级系统设置/系统变量 处检查如图所示2处配置:
1.2 Maven配置
1.2.1 私服镜像配置
<mirror>
<id>aliyun</id>
<name>aliyun for maven</name>
<mirrorOf>*</mirrorOf>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
1.2.2 本地仓库位置
或这样写
1.2.3 配置JDK
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
1.3 STS配置
1.3.1 配置字符集编码格式
1.3.2 检查JDK配置
1.3.3 引入maven
1).配置maven环境
2).编辑maven配置文件
1.3.4 关闭校验
1.4 构建SpringBoot入门项目
1.4.1 创建项目
1.4.2 创建项目(二)
2 京淘项目概述
解析:
图中的动吧旅游相当于一台tomcat服务器;若将来有很多大量的请求(电脑相代表访问用户);若只有一台tomcat服务器不能应对高并发多批量的访问。所以可以搭三台tomcat服务器(集群的概念)。
以前用户访问服务器是通过http://localhost:80这种方式来访问tomcat服务器。但这种方式也有问题,通过这种方式访问的只是一台服务器。用上面的图解释就是多台用户电脑只去访问一台tomcat服务器。
在实际开发中,几台服务器都得去访问,这样服务能力才能提升。而且也不能在用上述这种访问方式,所以这种技术若想实现,得有相应的域名,根据域名去访问某些服务器。如www.db.com。现在我们现在的技术能力是搞不定的,所以在中间多加一台代理服务器。代理服务器的作用是:相当于用户统一去访问代理服务器,一般会在代理服务器前加一个防火墙。加防火墙的目的是防止黑客的攻击。最后通过代理服务器将请求分发给不同的业务(Tomcat)服务器。
单台tomcat服务器它所能支持的并发能力是:150-240个/秒(正常一般是200左右每秒)。JVM调优之后,单台tomcat服务器能实现1000个/秒。调优的核心是:扩大tomcat处理的内存容量。 (知识点:1G=1024兆)。但也不是一直将内存容量调大就会是最优的,它成曲线一样,有一个最大值,在调大,反而减弱了。
据不完全统计:淘宝的tomcat服务器估计有3000多个。
问题2:用户发起大量请求,经过代理服务器的周转,将请求分发给不同的业务处理服务器。数据都得存到数据库。数据库的最大连接数是:最多是1000个连接。
数据库的优化是:有主数据库(主机),有若干台从数据库,
这样的方式好处:电子设备害怕水、火或灰尘。为了数据安全,将数据多备份。数据分开存。
连接数据库路是:jdbc:127.0.0.1:3306只能连接一台数据库服务器。所以也有一个数据库的代理服务器。主库会源源不断的向从库不断同步。这样可以保证主库的数据就是从库的数据。
将来进行写入的操作是往主库中写。将来进行读取的操作,可以到从库中去读。这样实现了读与写的分离。这样一次读取,多台数据库操作,叫做负载均衡。若觉得数据库处理能力不足,加数据库就可以。
问题3:将来用户有大批量读的操作,让后台、用户都去访问数据库,即使数据库处理能力再高,读的次数频繁,也会占用有限的资源。怎样让用户读取更快速?
读操作问题:
缓存技术:提前找一个地方先将数据存起来,用户读取的时候直接读缓存,就不用访问数据库了。
配置一个缓存的服务器,读的时候先找缓存,缓存中如果没有再去数据库中找数据。可以搭建多个缓存服务器,搭建多个缓存服务器机制也叫缓存集群,基本可以解决大量用户读的操作的要求。
写操作问题:
写操作的问题,将来在处理的时候还有另外一个代理机制:叫做队列。
如果缓存机制仍然接受不受考验,还可以加一层队列。
主流队列如:RabbitMQ、ActiveMQ等
队列的主要功能是缓解数据库读写的的压力。
综上所述,这样基本可以实现后台服务器的正常运行。我们把这种即使出了问题,也不影响程序正常服务的这种方式叫做高可用性。
高可用性可以实现的具体功能是:可以保证我们的用户在即使后台服务器出了问题之后,也能正常访问。
3.SpringBoot框架高级说明
3.1 parent标签的作用
<!--1.jar包种类繁多
A.jar 1.0版本 B.jar 2.0版本 C.jar 3.0版本
A.jar 2.0版本 B.jar 2.0版本 C.jar 3.0版本
早期的jar包版本 可能出现jar包冲突的问题.
所有采用parent标签的方式 统一定义了版本号 由官方自己进行测试,
将允许稳定的版本统一的管理.
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
3.2 关于maven 插件的说明
<!-- maven项目指定的插件配置 该插件主要负责 maven项目相关操作 打包/test/clean/update
等相关maven操作 注意事项:但凡是maven项目则必须添加
插件.否则将来项目部署必然出错 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.3 关于Maven 属性的配置
<!--当前maven配置信息 -->
<properties>
<java.version>1.8</java.version>
<!--定义maven插件版本 -->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<skipTests>true</skipTests>
</properties>
3.4 关于Maven依赖说明
3.4.1 依赖与本地仓库的关系
<!--maven的依赖 利用坐标的形式管理jar包 本地仓库之间有什么关系呀? -->
<dependency>
<!--组ID, 公司域名倒写. -->
<groupId>org.springframework.boot</groupId>
<!--具体项目名称 -->
<artifactId>spring-boot-starter-web</artifactId>
<!--版本号 被parent标签提前定义 -->
<!-- <version>2</version> -->
</dependency>
2).本地仓库内容
3).规则说明
如果以后下载jar包时,遇到maven依赖异常.则首先查询本地仓库中是否有该jar包的完整版本.
如果发现jar包文件下载不完全,则需要删除之后重新下载.
3.4.2 jar包与jar包之间的依赖传递性说明
1.说明: maven具有jar包的依赖性
例如: A.jar---->B.jar ------> C.jar
(即 A.jar依赖于B.jar,而B.jar依赖于C.jar )
只要导入A.jar 那么b/c都会自动的完成依赖
2).检查POM.xml文件
说明:由于maven加载jar包之后还会去加载该jar包文件的POM文件,如果该POM文件中依赖了其他的jar包,那么maven也会自动的进行加载.