day 01 京淘项目介绍,SpringBoot启动原理
此文档是在课上根据操作流程整理,更多细节请参见刘老师的专栏
江哥的专栏
一. 京淘项目整体架构图设计
工作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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。