1、大型网站架构演变历程
2、架构师需要拥有的技术栈与能力
3、项目分层设计
项目拆分与聚合
类似于汽车组装一样,汽车厂并不生产全部的零件,而是由各个工厂完成生成,汽车厂在进行组装,
对应到项目中,把相对应的功能外包给到其他组织,由他们去实现,最终整合到一起,完成整个项目。
Maven 聚合项目
一个项目是由多个模块组成,而 pom 用于记录对应的模块,项目也可以根据模块进行拆分,例如common、pojo,都可以拆分成单独的模块,模块之间也可以互相引用。
这里使用 RuoYi项目目录作为例子
PDMan数据库建模工具
数据库物理外键移除原因
- 性能影响
- 设置主外键查询,需要查询关联表,查询不必要的数据
- 热更新
- 不停机,进行维护
- 降低耦合度
- 物理外键,逻辑外键
- 数据库分库分表
- 大型数据库,如果有主外键关联,分库分表难处理,如有多个外键,分库分表很难处理
4、SpringBoot数据源
5、Mybatis数据库逆向生成工具
6、Restful Web Service
- 通信方式
- 系统之间相互通信
- 信息传递
- 无状态
- 独立性
Rest 设计规范
7、事务的传播
/**
* @link https://www.cnblogs.com/YuyuanNo1/p/11400638.html
* 事务传播
* Propagation
* REQUIRED:【默认】
* 使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法必须运行在一个事务中的;
* 如果当前存在事务,则加入这个事务,成为一个整体
* 举例:领导没饭吃,我自己有钱, 自己吃,领导有饭吃,自己也有饭吃
* SUPPORTS:【支持,主要做查询】
* 如果当前有事务,则使用事务,如果当前没有事务,则不使用事务【非事务方式】
* 举例:领导没饭吃,我也没饭,领导有饭,我也有饭
* MANDATORY:【强制】
* 如果已存在一个事务,那么支持当前这个事务,如果没有一个活动的事务,则抛出异常
* 举例:领导必须管饭,不管饭没饭吃,我就不乐意了,我就不干了(抛出异常)
* REQUIRES_NEW:【需要新的】
* 如果当前有事务,则挂起事务,并且自己创建一个新的事务给自己使用
* 如果当前没有事务,则同 REQUIRED
* 举例:领导有饭吃,我不要,我自己买了自己吃
* NOT_SUPPORTED:【不支持】
* 如果当前有事务,则把事务挂起,自己不适用事务去运行数据库操作【总是非事务执行,并挂起任何存在的事务】
* 举例:领导有饭吃,分一点给你,我太忙了放一边,我不吃
* NEVER【绝不】
* 总是非事务执行,如果存在一个活动事务,则抛出异常
* 举例:领导有饭吃,我偏不吃 我热爱工作 我抛出异常
* NESTED:【嵌套】
* 如果当前有事务,则开启子事务(嵌套事务)嵌套事务是独立提交或回滚
* 如果当前没有事务,默认使用 REQUIRED
* 但是如果主事务提交,则会携带子事务一起提交
* 如果主事务回滚,则子事务一起回滚,相反,子事务异常,则父事务可以回滚或不回滚
* 外层事务失败,会回滚内层事务做的操作,而内层事务失败,并不会引起外层事务的回滚
* 举例: 领导决策不对,老板怪罪,领导带着小弟一同受罪,小弟出了差错,领导可以推卸责任。
* @param id
* @return
*/