共计 3150 个字符,预计需要花费 8 分钟才能阅读完成。
day 01 京淘我的项目介绍,SpringBoot 启动原理
此文档是在课上依据操作流程整顿,更多细节请参见刘老师的专栏
江哥的专栏
《cgb2008- 京淘 day01》
一. 京淘我的项目整体架构图设计
工作 3~5 年之后
单体架构模式:将所有的功能模块写到一个 tomcat 服务器中。tomcat 并发能力:200/ 秒,带宽:10M。
www.jd.com:80 “IP+ 端口 ” 的形式只能拜访一个服务器
防火墙 / 网络安全
--> 反向代理服务器(公司拜访的惟一入口) --> 服务分发给不同的 tomcat 服务器
--> 缓存服务器集群... --> 中间件[爱护数据库的规定]
--> 数据库代理 --> 数据库服务器 (本人保护) 主机 / 写操作 --> 从机(备份)/ 读操作 [读写拆散]
--> 从机... [负载平衡][高可用]
二. 京淘项目表设计
- 表与表关系
秘籍:设想成为找对象的业务场景!!!(从心田 (本人) 登程)
i. 一对一:商品与形容
1) 商品与形容一对一;2) 形容与商品一对一
关联关系:本人的主键 \<pk> 充当他人的外键 \<fk>,主键和外键统一。
ii. 一对多:分类与商品
<u> 有外键的表个别与关联表是一对一,关联表与加外键的表是一对多。</u>
1) 分类与商品一 [主] 对多;2) 商品与分类一 [主] 对一[外]
关联关系:主键不能够反复,个别条件下<u> 外键能够反复 </u>,主键和外键不统一。
iii. 多对多(本质:双向一对多):角色与权限
1) 一个角色对应多个权限; 2) 一个权限被多个角色所具备
表的个数:3 张表 –> 角色表[role_id\<pk>] + 权限表[pri_id\<pk>]
+ 角色权限关系表[id,role_id\<fk1>,pri_id\<fk2>] 联结主键:<fk1,fk2>
-
导入数据库
导入的命令 source 门路:/xxx.sql
i. 装置数据库工具 — SQLyog
ii. 导入数据库
右键 –> 从脚本文件创建数据库 –> 抉择 jtdb.sql
三. 切换 IDEA 工作空间,批改配置
- 筹备空文件夹 — CGB2008_Jingtao
- 装置 lombok 的插件
- 配置键位(快捷键)
- 批改鼠标的缩放,智能提醒
- 构建我的项目
- 配置 maven
- 设置主动保留
- 启动构造方法的主动提醒
四. 实现 SpringBoot 手动创立 / 理解什么是开箱即用原理
- 创立我的项目
- 引入 jar 包
-
对于 Maven 阐明
Maven 是一站式项目管理工具,能够创立我的项目,治理我的项目,我的项目打包,依赖、公布等。
i. 对于 Maven 坐标的阐明
地方仓库 jar <–> 代理(私服镜像 - 阿里云) <–> 本地库
Maven 中有很多其余机构开源的 jar 包,未来通过坐标的模式进行对立治理。
jar 包地位:D:\JavaDevelop\localRepo\org\springframework\boot\spring-boot-starter\2.4.0
<dependency> <groupId>org.springframework.boot</groupId> 公司域名倒写 <artifactId>spring-boot-starter-web</artifactId> 我的项目名 <version>2.4.0</version> 版本号 </dependency>
ii. 对于 maven 中 jar 包依赖传递性的阐明
在 maven 我的项目中如果 A.jar 依赖 B.jar,B.jar 依赖于 C.jar。当程序通过 maven 引入 A.jar 的时候会主动引入 B /C.jar。
原理:1) 当用户增加 jar 包文件时,maven 工具会通过坐标加载 jar 包;2) 加载实现加载完 jar 包之后,会解析其 pom 文件,看是否还有 jar 包依赖。
iii. maven 工具如何保障 jar 包文件平安得传递
SHA-1(平安散列算法 -1)能够生成 160 位 (20 字节,40 个十六进制数) 的 ” 音讯摘要 ”。例如:junit-4.12.jar.sha1
常识:1) 如果数据雷同,它的哈希值肯定雷同;2) 一个数据 10k,一个数据 1G,计算哈希值速度约等于一样快。
A.jar –SHA1–> 音讯摘要 A.jar.sha1 - 传输 -> B.jar –SHA1 –> 音讯摘要 B.jar.sha1(比照是否雷同)
http 协定 –[数据证书 寰球惟一 非对称加密]–> https 协定
对称加密:加密和解密的秘钥一样,不能保障相对平安。
非对称加密:加密秘钥和解密秘钥配合应用,单看一把不能看出全貌。
-
pom.xml 文件中标签的作用(一)
i. 编辑在 maven 中展示的名称
<name>springboot_demo1</name>
ii. maven 打包形式
<!-- 打包品种:jar war pom(聚合我的项目 大型项目) --> <packaging>jar</packaging>
iii. 打包
clean(清空 target 目录) –> compile(编译源文件,生成 target 目录) –> install(在 target 目录和本地库中生成我的项目的 jar 包)
iv. jar 包文件运行测试
命令: java -jar xxxx.jar 退出: ctrl+c
- 对于环境阐明
i. 对于 JDK 配置
查找 jdk 的根目录 –> 配置环境变量 (JAVA_HOME,%JAVA_HOME%\bin)
ii. 对于 Maven 阐明
maven 装置门路 –> maven 配置文件
-
pom.xml 文件中标签的作用(二)
i. dependencies 标签
<!-- 2. 依赖的作用: 依赖须要的 jar 包文件 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <!-- spring-boot-starter-xxx 启动项 开箱即用 只须要引入特定的 jar 包, 进行简略的配置, 即能够应用该性能 -->
ii. build 标签
<!-- 3.build 标签的作用: 让程序应用 maven 命令时, 依照指定插件运行 必须配置 --> <build> <plugins> <plugin>
-
SpringBoot 启动流程
@SpringBootApplication
i. 元注解阐明
润饰注解的注解称之为元注解
@Target({ElementType.TYPE}) // 该注解对类无效 @Retention(RetentionPolicy.RUNTIME) // 该注解运行期无效 @Documented // 生成文档信息 @Inherited // 该注解是否容许被继承
ii. 排除过滤器启动
作用:因为 SpringBoot 须要主动加载的项很多,要排除掉一些不加载的项
@ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} )
iii. 配置类
通过注解得悉,主启动类就是一个配置类,作用是在启动时有第三方的配置,则被动地加载,大的配置文件中蕴含小的
@SpringBootConfiguration
iv. 自动化地配置
1) @AutoConfigurationPackage:指定了 SpringBootq 启动时包扫描的门路 — 主启动类的同包或子包下;
2) @Import({AutoConfigurationImportSelector.class}):该注解次要示意当程序启动时,SpringBoot 外部会有多个选择器顺次启动。选择器启动时会去加载指定的 jar 包文件,这时开箱启用才能够应用。
@EnableAutoConfiguration