springboot
1.单体项目的其他问题
1.1.功能的强耦合
由于所有业务都在一个项目中,随着业务模块的增加,系统会变得越来越复杂,一旦某些功能存在强耦合,会造成开发人员必须精通多个业务模块逻辑,多个领域知识,不利于团队、人员配合,也不利于项目扩展
需要将不同的功能和业务进行拆分,例如order-user项目,可以拆分为order和user两个项目,这样,order项目只关心和订单相关业务,不关心user相关业务,反之亦然,这样的功能拆分称之为纵向拆分
1.2.系统拆分
1.横向拆分(解决项目开发的强耦合)
根据项目的三层结构,控制层依赖业务层,依赖持久层,进行分模块的开发,不同的程序员开发不同的模块
2.纵向拆分(解决业务模块功能强耦合)
就是解决业务功能系统不同部分拆分成独立运行的系统项目,相互之间数据调用根据接口文件访问
1.3.并发集中
如果是单体项目,很有可能某一个功能并发量特别大,导致整系统响应慢,如果纵向拆分,即使某个系统并发量特别大,也不会影响别的系统的正常访问
2.springboot
2.1.背景
nginx解决了并发问题,但是没有解决并发集中问题,功能强耦合,需要进行拆分(纵向拆分),这种情况下,一种方便的工具框架就产生了-springboot
2.2.什么是springboot
一种基于spring框架,完成独立运行,自动配置的一种工具框架。
2.3.springboot的特点(相对web应用)
1.独立运行的spring项目
springboot封装了spring所有的启动过程,可以通过简单的方法实现启动一个具有spring框架功能的进程,如果不做web应用,不需要tomcat这种外部容器来加载spring配置文件,从而生成spring容器的过程,因为spring4.X版本的出现,几乎所有的配置都转换成了注解
2.springboot内嵌的servlet
不配置任何tomcat插件,不用将项目发布到任何外部的tomcat容器,直接在依赖总完成了默认的servlet容器整合,一旦启动了spring的独立运行机制,可以加载内嵌的servlet实现web应用的独立运行
3.springboot提供简化依赖
根据开发人员依赖的不同,早就封装了简化依赖,实现依赖的传递性,例如:当开发一个web应用是,暂不考虑持久层,只需要依赖一个spring-boot-starter-web,将会给你传递tomcat、spring-beans、jackson、log4g等非常多的jar包
4.springboot自动配置
默认自动的扫描范围
启动springboot工程,所有扫描范围内的注解都会加载到内存
根据依赖完成相关自动配置
springboot可以根据项目中完成的依赖资源,例如spring-boot-starter-web,自动配置就会判断功能是开发一个web应用,就会完成tomcat的自动加载,默认端口8080,还有其他配置信息等
以上特点导致springboot可以“0”配置启动一个web应用
2.4.springboot原理
springboot的启动类运行时,通过@SpringBootApplication注解扫描本包及本包下子包的注解,找到@Component、@Controller、@Service、@Repository等注解,管理bean(有set和get方法),哪用哪注入。
@Data是lombok包下的注解,自动生成tostring、get、set和构造方法等。