SpringBoot 入门基础
目录
一、SpringBoot简介
优点
二、微服务入门
架构风格
优点
缺点
三、补充(目前应用的Java架构)
SSM(传统-快被取代)
单体应用SpringBoot(主流)
前后端分离SpringBoot(主流)
前后端分离SpringCloud(微服务)(主流)
四、架构演变
1. 单体应用架构
架构图
优点
缺点
举例
2. 垂直应用架构
架构图
优点
缺点
举例
3.分布式架构
架构图
优点
缺点
举例
4.SOA架构(面向服务架构)
架构图
优点
缺点
举例
5.微服务架构
架构图
优点
缺点
在进行SpringBoot之前,先来了解一下JavaWeb的发展历程:
1. JavaWeb初期:使用JavaBean、Servlet和JSP构建Web应用,分别负责业务逻辑、请求处理和页面展示。
2. EJB阶段:引入EJB框架,虽提供高级特性,但复杂且影响性能。
3. Spring流行:Spring框架普及,Spring MVC/Struts处理Web层,Spring处理业务层,Hibernate/myBatis负责数据访问。
4. Spring Boot:简化配置,让开发者更专注于业务逻辑。
5. SOA架构:以Dubbo为例,构建分布式服务的高性能RPC框架。
6. Spring Cloud微服务:提供完整的微服务解决方案,简化微服务的构建和管理。
目前各大公司在Java Web开发中使用的主流框架是Spring Boot和Spring Cloud;
上面第五阶段和第六阶段都是微服务架构技术,但是因为第六阶段的Spring Cloud微服务架构技术生态圈提供了比第五阶段的SOA更加强大和灵活的微服务解决方案,所以第五阶段的SOA框架几乎被忽视不计。
一、SpringBoot简介
-
简化Spring应用开发的框架:Spring Boot是一个用于简化Spring应用开发的框架,它提供了快速构建、开箱即用的特性,使得开发人员可以更快速地搭建和部署应用程序。
-
整个Spring技术栈的一个大整合:Spring Boot整合了Spring各项功能,提供了默认配置,使得开发者无需定义样板化的配置,简化了Spring应用的初始搭建以及开发过程。
-
J2EE开发的一站式解决方案:Spring Boot通过提供内置的Web服务器、数据库支持、安全性、日志记录和监控等功能,帮助开发人员快速构建生产级别的Spring应用程序。
优点
-
快速创建独立运行的Spring项目以及与主流框架集成:Spring Boot帮助开发者快速创建独立的、生产级别的基于Spring框架的应用程序,同时大大减少了配置工作。
-
使用嵌入式的Servlet容器:应用无需打成war包,内嵌Tomcat,Spring Boot提供了内置的Web服务器,如Tomcat、Jetty和Undertow等,可以快速创建和部署Web应用程序。
-
Starters自动依赖和版本控制:Spring Boot的Starters通过自动依赖和版本控制,简化了项目的依赖管理和配置工作,无需担心复杂的依赖关系和版本冲突问题。
-
大量的自动装配,简化开发,也可以修改默认值:Spring Boot采用“约定优于配置”的方式,减少了开发人员的配置工作量,并使应用程序更易于维护和升级。
-
无需配置XML无代码生成开箱即用:Spring Boot提供了丰富的插件和工具,可以帮助开发人员更轻松地构建和测试应用程序。
-
准生产环境的运行时应用监控:Spring Boot提供了多种生产就绪的功能,如健康检查、指标监控、外部化配置、日志管理等,帮助开发者更好地管理和监控应用程序。
-
与云计算的天然集成:Spring Boot通过其轻量级和容器化的特点,与Kubernetes、Docker等云原生技术栈无缝集成,支持开发者快速构建和部署云原生应用。
二、微服务入门
在本篇文章中先简单对微服务进行一个基础概况,后续令开博客详细讲解。
微服务文档(可以参考看看):https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa
架构风格
微服务是指开发单个小型的但有业务功能的服务,每个服务都有自己处理和轻量通讯机制,可以部署在单个或多个服务器上。微服务也指一种种松耦合的有一定的有界上下文的面向服务架构。
优点
-
小且专注:每个微服务小而精,聚焦特定业务功能,易被开发人员理解、修改和维护。
-
独立开发与部署:松耦合特性使各微服务独立开发、部署,小团队(2-5人)可单独开发,新成员易上手,能即时扩展或用中低端配置部署。
-
技术灵活:可使用不同语言开发,能通过持续集成工具灵活集成自动部署。
-
易于集成:易于和第三方集成,且每个微服务可有自己数据库或用统一数据库。
缺点
-
操作复杂:可能带来过多操作,需双倍努力,分布式系统复杂难管理。
-
问题跟踪难:因分布部署导致跟踪问题难,服务量增加时管理复杂性上升。
三、补充(目前应用的Java架构)
SSM(传统-快被取代)
-
前端:使用JSP或HTML页面。
-
后端:采用SSM框架,即Spring + SpringMVC + MyBatis。
-
特点:SpringMVC作为MVC框架,用于处理Web请求,Spring负责业务逻辑,MyBatis用于数据库操作。这种架构较为传统,逐渐被更现代的框架所取代。
单体应用SpringBoot(主流)
-
前端:使用LayUI和Thymeleaf作为前端框架。
-
后端:采用SpringBoot框架,后端数据访问层可以选择MyBatis或JPA,Redis作为可选的缓存解决方案。
-
特点:SpringBoot简化了Spring应用的配置和部署,使得开发单体应用更加快捷和方便。它支持自动配置和内嵌服务器,减少了外部依赖。
前后端分离SpringBoot(主流)
-
前端:使用Vue.js作为前端框架,ElementUI作为UI组件库,Axios用于处理HTTP请求。
-
后端:采用SpringBoot框架,后端数据访问层可以选择MyBatis或JPA,Redis作为可选的缓存解决方案。
-
特点:前后端分离架构使得前端和后端可以独立开发和部署,提高了开发效率和应用的可维护性。前端通过API与后端进行通信。
前后端分离SpringCloud(微服务)(主流)
-
前端:使用Vue.js作为前端框架,ElementUI作为UI组件库,Axios用于处理HTTP请求。
-
后端:采用SpringBoot和SpringCloud框架,后端数据访问层可以选择MyBatis或JPA,Redis作为可选的缓存解决方案,Elasticsearch作为可选的搜索解决方案,MQ(消息队列)作为可选的异步处理解决方案。
-
特点:SpringCloud提供了一套完整的微服务解决方案,包括服务发现、配置管理、负载均衡、断路器、智能路由等。这种架构适用于构建大型、复杂的分布式系统。
四、架构演变
1. 单体应用架构
架构图
单体应用架构通常将所有功能模块集成在一个单一的应用中,部署在单个服务器上。以下是一个简化的单体应用架构图:
+-------------------+
| 单体应用服务器 |
| |
| +-------------+ |
| | 前台页面 | |
| +-------------+ |
| | 后台管理 | |
| +-------------+ |
| | 前台个人中心 | |
| +-------------+ |
+-------------------+
tomcat
优点
-
架构简单易懂:单体应用的架构图直观,易于理解和维护。
-
开发维护简单:对于小型项目,单体应用的开发和维护成本较低,因为所有功能都集成在一个应用中。
-
部署方便:单体应用通常部署在一个单点的Tomcat服务器上,后期维护和升级相对简单。
缺点
-
维护困难:对于大型项目,单体应用的维护变得困难,因为所有功能模块都紧密耦合在一起。
-
单点容错率低:单体应用通常部署在单个服务器上,如果服务器出现故障,整个应用都会受到影响。
-
无法针对单个模块进行扩展或优化:单体应用难以针对某个特定模块进行水平扩展或优化,因为所有模块都共享同一个服务器资源。
举例
-
SSM(Spring + SpringMVC + MyBatis):这是一个典型的单体应用架构,所有业务逻辑、数据访问和Web层都集成在一个应用中。
-
Spring Boot:虽然Spring Boot本身支持微服务架构,但它也可以用于构建单体应用,所有功能模块都在同一个Spring Boot应用中。
2. 垂直应用架构
架构图
垂直应用架构将应用的不同功能模块垂直分割并独立部署,每个模块可以独立运行在自己的服务器上。以下是一个简化的垂直应用架构图:
+-------------------+ +-------------------+ +-------------------+
| 前台系统 | | 后台管理系统 | | 个人中心系统 |
| | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
| | tomcat | | | | tomcat | | | | tomcat | |
| +-------------+ | | +-------------+ | | +-------------+ |
+-------------------+ +-------------------+ +-------------------+
就比如在idea的这里就可以实现搭建简单垂直架构的第一步:
优点
-
水平扩展和优化:系统分割后,可以针对各个模块进行水平扩展和优化,提高系统的可扩展性和性能。
-
提高单点容错性:每个模块独立部署,提高了系统的容错性,一个模块的故障不会直接影响到其他模块。
缺点
-
系统间无法相互调用:由于模块独立部署,系统之间无法直接相互调用,需要通过网络通信进行交互,增加了复杂性。
-
代码重复:不同模块可能会有一些公共的功能,这些功能在不同模块中可能会重复实现,导致代码重复和维护困难。
举例
-
大型电商网站:可以将用户管理、商品管理、订单管理等功能分别部署为独立的系统,每个系统负责特定的业务逻辑。
-
企业级应用:可以将人力资源管理、财务管理、客户关系管理等功能分别部署为独立的系统,每个系统独立运行在自己的服务器上。
3.分布式架构
架构图
分布式架构将应用的不同功能模块部署为独立的服务,并通过网络进行通信。以下是一个简化的分布式
优点
-
代码复用:抽取公共代码为服务层,增强代码复用性。
缺点
-
维护难:调用关系复杂,维护困难。
举例
-
电商平台:用户服务、商品服务、订单服务等可以作为独立的服务部署,并通过API进行通信。
-
金融服务:账户服务、交易服务、通知服务等可以独立部署,提高系统的可扩展性和容错性。
4.SOA架构(面向服务架构)
架构图
SOA架构通过服务治理中心(如Dubbo)将应用的不同功能模块定义为服务,并通过标准的接口进行通信。以下是一个简化的SOA架构图:
优点
-
模块化:服务化提高了系统的模块化程度,易于管理和扩展。
-
灵活性:服务可以独立部署和扩展,提高了系统的灵活性。
缺点
-
复杂性:引入服务治理增加了系统的复杂性,需要额外的管理和维护。
-
性能开销:服务间通信可能引入额外的性能开销。
举例
-
电商平台:用户服务、商品服务、订单服务等可以作为独立的服务,通过SOA架构进行管理和通信。
-
金融服务:账户服务、交易服务、通知服务等可以独立部署,通过SOA架构实现服务的管理和调用。
5.微服务架构
架构图
微服务架构将应用分解为一组小型、独立的服务,每个服务实现特定的业务功能,并通过轻量级的通信机制进行交互。以下是一个简化的微服务架构图:
+-------------------+
| 商品微服务 |
+-------------------+
|
v
+-------------------+
| 秒杀微服务 |
+-------------------+
|
v
+-------------------+ +-------------------+
| 订单微服务 |<----->| 用户微服务 |
+-------------------+ +-------------------+
|
v
+-------------------+
| 消息服务 |
+-------------------+
|
v
+-------------------+
| ... |
+-------------------+
优点
-
独立性:每个服务独立开发、部署和扩展。
-
灵活性:技术栈灵活,可根据不同服务需求选择不同技术。
缺点
-
复杂性:服务管理、调用和故障排查复杂。