SpringBoot框架(⼀)——SpringBoot之简介、优缺点
Spring Boot 简介
⼀、Spring Boot 概述
1.1 Spring Boot 概述
1.1.1 Spring Boot 介绍
(1)Spring Boot是由Pivotal团队提供的全新框架,其设计⽬的是⽤来简化新Spring应⽤的初始搭建以及开发过程。该框架使⽤了特定的⽅式来进⾏配置,从⽽使开发⼈员不再需要定义样板化的配置。传统的spring项⽬中需要⽤到⼤量的xml配置,以及复杂的bean依赖关系,随着spring3.0的发布spring团队开始⼤量使⽤约定⼤于配置的思想来简化配置。
(2)Spring Boot就是这样⼀种开发框架,Spring Boot并不能直接完成Spring的⼯作。准确的说Spring Boot只是⼀个整合Spring各项功能的中间件,⽤于快速的开发Spring应⽤,同时针对于常⽤的第三⽅库也提供了默认的配置,⼏乎可以实现0配置开发的⽬的。
(3)Spring Boot的设计是可以尽可能快地启动和运⾏,只需要最少的Spring配置。Spring Boot对构建
⽣产就绪应⽤程序具有独特的⽅式。从官⽅的介绍可以看出Spring Boot的核⼼思想是“约定优先于配置(Convention Over Configuration)”,其本质其实还是基于Spring来实现的。对于了解Spring的⼈或者使⽤过Spring的⼈来说,Spring烦琐的配置让很多程序员眼花缭乱(各种XML、Annotation 配置等),甚⾄很多时候发⽣错误也很难快速定位错误的地⽅。⽽在Spring Boot框架中,为我们提供了默认的配置,从⽽使开发⼈员不再需要定义样板化的配置,通过这种⽅式,Spring Boot致⼒于在蓬勃发展的快速应⽤开发领域(Rapid Application Development)成为领导者。
1.2 Spring Boot 特点
1.2.2 嵌⼊式Web容器
在传统Java Web项⽬中,当项⽬开发完成之后,还需要配置所需的Web容器(诸如Tomcat或者WebLogic之类的Web容器)。但是在Spring Boot搭建的项⽬中,内部提供了⼏种Web容器,如Tomcat、Jetty和Undertow。
在Spring Boot 1.x中默认为Tomcat;Spring Boot 2.x中则分为两种情况,引⼊spring-boot-starter-web依赖为Tomcat,引⼊spring-boot-starter-webflux依赖则为Netty。当然,也⽀持使⽤之前指出的⼏种Web容器,开发者只需要根据场景选择适合的Starter来获取⼀个默认配置好的容器即可,当启动成功后,应⽤⼀个默认端⼝为8080的HTTP服务。
1.2.3 易于构建任何应⽤
Spring Boot提供了⼀个强⼤的starter依赖机制,实质上Spring团队将Spring Boot框架整合了⼀切常⽤的maven依赖,使Spring Boot 想要整合对应依赖,就要将需要的依赖全部引⼊。⽐如,需要在项⽬中使⽤Web,也就是我们常说的Spring MVC,如果是原有的maven 项⽬,就需要引⼊很多依赖才能完成这个简单的需求。但是在Spring Boot项⽬中,我们只需要在maven依赖中加⼊spring-boot-starter-web依赖即可。⽐如项⽬中需要使⽤MySQL数据库,这⾥只需要加⼊MySQL依赖,并且在配置⽂件中配置数据库信息就可以正常使⽤。
1.2.4 ⾃动化配置
springboot框架的作用这个特点是上⼀个特点的延伸,在应⽤程序中引⼊依赖之后,其实还有⼀个强⼤之处在于Spring Boot应⽤会根据引⼊的依赖提供⼀些默认的配置供我们使⽤,如果需要修改,那么只需要在配置⽂件中修改对应的配置即可完成需求。
以Spring MVC为例,传统Spring MVC项⽬需要配置对应的诸如l(Spring配置⽂件)、ApplicationContext-
l(Spring MVC配置⽂件),⽽在Spring Boot中,这些需要的配置已经为我们默认配置了⼀套,
不需要再进⾏配置了。⽐如,我们要加⼊Web应⽤程序根路径test的话,只需要在application.properties(Spring Boot应⽤程序默认配置⽂件)中加⼊t-path=/test即可。
1.2.5 开发者⼯具
在开发Web应⽤的时候,总会有⼀个困扰我们的问题,修改代码总是伴随不断重启项⽬,需要不断地断开Web容器,再重启来测试我们的代码。在Spring Boot应⽤中提供了开发者⼯具(spring-boot-devtools),当我们重新编译类⽂件的时候,开发者⼯具会⾃动替我们重启应⽤,⽆须⼿动单击重启。
1.2.6 强⼤的应⽤监控
在⽣产环境中,应⽤的各项指标监控更是必不可少。在Spring Boot应⽤中提供了⼀个spring-boot-starter-actuator(以下简称Spring Boot-Actuator)来供我们查看应⽤的各项指标,如health(健康检查)、dump(活动线程)、env(环境属性)、metrics(内存,CPU等)等指标,以监控我们的应⽤,同时可以配合使⽤spring-boot-admin-starter-server(以下简称Spring Boot-Admin)监控我们的项⽬。
Spring Boot-Admin可以在利⽤监控Spring Boot-Actuator端点的同时监控所有微服务应⽤的健康状态,如果出现异常,就可以向维护⼈员发送邮件或者以其他⽅式给予告警。不只是这样,就连监控神器Prometheus也可以通过简单的配置接⼊Spring Boot应⽤程序中。
1.2.7 默认提供测试框架
Spring Boot应⽤在创建项⽬之后会默认为我们创建测试类的⽂件,实质上就是引⼊spring-boot-starter-test依赖,然后可以通过它对各种场景进⾏测试,⾜够满⾜对项⽬的测试需求。
1.2.8 可执⾏Jar部署
由于Spring Boot项⽬内嵌Web容器,因此提供了⼀种特殊部署⽅式,可以直接利⽤Maven或者Gradle对Spring Boot项⽬进⾏打包,⽣成⼀个JAR⽂件,然后直接在具备环境的服务器或本地环境中利⽤java -jar xx.jar执⾏JAR⽂件,使应⽤能够快速运⾏。
1.2.9 IDE多样性
Spring Boot⽀持的开发⼯具很多,⽆论是曾经⼏乎所有开发者都使⽤的Eclipse⼀族,还是现在流⾏的IntelliJ IDEA,⼜或者是专门为开发Spring系列⽽⽣的Spring Tool Suite都是开发Spring Boot应⽤的不⼆法宝。
1.3 Spring Boot 的优点
1.3.1 简化⼯作
Spring Boot最⼤的优点是在⼀定程度上简化了我们的⼯作,⼤致分为以下⼏个⾓度对⼯作进⾏简化。 ·
(1)依赖简化:Spring Boot⾃有的starter中提供了⼀些可以快捷使⽤的依赖,让整合或集成⼀些常⽤的功能更便捷。
(2)配置简化:在配置⽅法中,如果没有特殊情况,Spring Boot为我们提供了⼀些默认的配置,⽐如端⼝号默认为8080等。
(3)部署简化:正如前⾯介绍的可执⾏JAR部署,与传统服务的Web模式部署(打WAR包部署)相⽐,连安装Web容器的时间都节省了,不只是开发者,对运维⼈员也是福⾳。
(4)监控简化:可以通过引⽤Spring Boot依赖的⽅式快捷提供监控端点,⽆代码侵⼊,⼗分便捷。
1.3.2 微服务时代
“微服务”⼀词最早是由Martin Fowler的《Microservices》⼀⽂提出的,其核⼼思想是将⼀个单体应⽤根据业务功能拆分成为多个服务,使业务代码之间不再耦合。
微服务的优势
(1)服务解耦:将单体应⽤转变为多个服务,服务与服务之间通过HTTP协议或其他约定好的协议等进⾏⽹络通信。
(2)技术选型⼴泛:微服务不需要局限于固定的技术栈,各个服务的开发团队可以根据场景⾃由选择开发技术,如Java、PHP、Node.Js 等。
(3)服务并⾏开发:可以多个团队分别开发不同的模块,每个团队负责⼀个或者⼏个服务,相互不受影响。
(4)单⼀职责:不同服务的团队只需要关注⾃⼰团队的业务,⽆须经常为了熟悉业务⽽耽误时间。
(5)独⽴部署:由于每个服务都是独⽴的项⽬,因此当服务开发完成后,可以直接独⽴部署。
(6)敏捷开发:每个服务的业务迭代只需要更新对应服务的功能即可,⽀持快速迭代。
(7)故障隔离:在传统单体项⽬中,如果某个功能发。
微服务的劣势
(1)部署需要花费更多的精⼒:当服务拆分得⾮常多的时候,可能需要消耗更多的精⼒去运维管理这些应⽤。传统的单体应⽤下,运维⼈员只需要保证⼀个服务正常运⾏即可,但是拆分微服务后,可能需要保持⼏⼗,甚⾄上百、上千的服务⾼效运⾏,这对运维⼈员来说是⼀个很⼤的挑战。
(2)服务间的接⼝问题:正因为拆分了微服务,服务与服务间使⽤接⼝进⾏相互调⽤,当⼀个接⼝需要改变格式或者增减数据时,所有调⽤这个接⼝的服务都需要做出相应的调整才能正确地使⽤。
(3)⾼可⽤:拆分微服务后,可能有很多服务需要调⽤同⼀个服务或者接⼝,这个服务的可⽤性就需要让我们更加注意。
(4)分布式事务:微服务系统各个服务间可能使⽤不同的数据库,⽐如搜索服务使⽤Elasticsearch、基础服务使⽤MySQL、评论服务使⽤MongoDB,对于不同数据库间数据的⼀致性将是我们⾯临的重⼤挑战。
(5)⽹络复杂性:由于各个服务间使⽤接⼝调⽤,因此系统间需要考虑很多⽹络延迟等客观因素来保证服务间的正常运转。
(6)测试的复杂性:在测试⽅⾯,服务间的接⼝调⽤、服务间的测试需要⼀套整体的测试⽅案,⾃动
化测试就显得必不可少。
由于Spring Boot项⽬可以提供快速开发、测试、部署,因此Spring Boot是微服务应⽤的不⼆选择。
1.3.3 社区背景强⼤
社区背景强⼤其实是Spring Boot如今盛⾏的原因。众所周知,Spring家族对于开发者提供了⽆尽的便利,⽽作为Spring的亲⼉
⼦“Spring Boot”则继承了⼀切Spring的优点,并且规避了很多Spring框架臃肿的缺点,⽽后续Spring家族的分布式框架Spring Cloud 也是基于Spring Boot框架实现的框架,所以作为Spring的爱好者,或者将要学习Spring Cloud框架的开发者,Spring Boot是必须要学习的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论