您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

十年架构师告诉你到底什么是Spring Boot?

时间:2019-08-05 13:22:16  来源:  作者:



Spring Boot是一个真正的游戏改变者,它的受欢迎程度现在不断增加。让我们看看Spring Boot到底是什么?Spring Boot是一个构建在Spring框架顶部的项目。它提供了一种更简单、更快捷的方法来设置、配置和运行简单和基于Web的应用程序。

在过去Spring框架中,我们需要为应用配置所有的内容,会有许多配置文件,例如XML或元注释,这是Spring Boot解决的主要问题之一,基本无需XML配置了,都使用@注释。

Spring boot巧妙地根据我们选择的依赖配置,可以自动启动我们想要的所有功能,并且只需单击一下即可启动应用程序。此外,它还简化了应用程序的部署过程。

初次使用Spring Boot可能让你感觉似乎发生了什么许多“神奇”的事情。

Spring Boot组件

Spring Boot自动配置: Spring启动能够检测某些框架的可用性,例如Spring Data

JPA,Spring Batch,Hibernate和JDBC。一旦检测到框架,它将自动配置它。

Spring Boot Core:是其他Spring模型的基础。它提供了某些功能,可以通过验证自行完成。

Spring Boot Starters:帮助启动项目,它会自动添加启动项目和依赖项。

Spring Boot特点

  • 用来实现微服务;
  • 自动配置
  • 自定义配置
  • 模块化
  • 独立打包 直接运行
  • 内嵌服务器
  • Spring cloud的基础

实现微服务

微服务是一种细小粒度的服务,可直接通过端口对外提供服务,Spring Boot提供REST风格API暴露微服务,与客户端交换采取JSON数据格式。

自动配置

Spring Boot的最佳功能之一是它根据您的依赖关系自动配置您的应用程序。它不仅智能,活跃,而且具有上下文智能,并记录您的要求。我们以数据库功能为例。如果你向pom.xml添加了一个需求,它与数据库有某种关系,那么Spring引导本身假定你想要使用数据库,因此它允许你的应用程序随时使用该数据库。

只要在pom.xml增加相应依赖就等同于加入相应的组件:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

上面配置说明这个应用启动了pring-boot-starter-web的功能,也就是能提供REST端点暴露,让客户端通过/xxx/xx这样形式URL访问内部服务和资源。

Spring专门提供了https://start.spring.io/让你选择一个SpringBoot需要的组件。Idea等开发工具提供了自动导航服务。

创建一个SpringBoot的微服务应用,只要在应用入口类上标注@SpringBootApplication:

@SpringBootApplication = @EnableAutoConfiguration + @Configuration + @ComponentScan.

  • @EnableAutoConfiguration: Spring Boot会根据添加的maven的pom.xml的依赖项自动配置加载相应的依赖组件,它能智能感知上下文。
  • @Configuration表示当前类是一个配置工厂,可生产当前项目所需的各种Bean实例,类似于XML中的<bean id=xxx name=xxxx>。如果你想为当前项目导入其他组件,除了配置pom.xml以外,还可以在这里用代码使用工厂模式创建,类的方法上使用@Bean标注,也可用函数式方式创建,性能更好。
  • @ComponentScan是用于自动扫描包,如果不明确声明,只使用@SpringBootApplication,那么就扫描当前所在的包和子包。

自定义配置

Spring Boot除了提供入口函数以外,还提供配置,有两种形式:application.properties和application.yaml,后一种格式在Docker和K8s容器编排中比较常用。比如上面启动了JPA,那么可以在applciation.properties中配置JPA的配置:

spring.datasource.url=jdbc:MySQL://localhost:3306/temp
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update

这就具体指明了JPA实现使用Hibernate,具体数据库时MySQL。

Spring Cloud中各个组件的配置基本都是在这里实现,基本无需写任何代码就可以实现服务网关、服务发现和负载平衡以及断路器功能。

模块化

一般情况下,一个SpringBoot应用 = 一个微服务 = 一个模块 = 一个有边界的上下文,如果有多个模块,我们就开发多个微服务,多个SpringBoot应用,然后使用Springcloud实现它们之间动态访问和监控。 但是有时我们也会希望将多个模块放入一个SpringBoot应用中,这样模块之间调用可以在一个JVM内进行,适合小型系统的部署,随着规模扩大,我们还可将这些模块变成一个个微服务,以SpringBoot应用分布式运行。

其实就是解释@Configuration + @EnableAutoConfiguration + @ComponentScan 三个注释:

使用Spring Boot实现模块化

独立打包

Spring Boot允许您设计独立的,生产级质量的应用程序,您可以在任何网站上运行而不会浪费时间。您可能认为运行JAVA应用程序非常简单容易。你需要做的就是给出一个运行命令,一切都开始发生你所想到的。老实说,这不是真的!要运行java应用程序,过去需要执行以下步骤:

  • 打包你的应用
  • 选择要运行应用程序的Web服务器类型并下载它
  • 配置该Web服务器
  • 组织部署过程

但是,如果您使用Spring Boot技术来运行应用程序,则只需执行以下两个步骤:

  • 打包你的申请
  • 使用一些简单的命令运行它,例如java -jar my-application.jar

这有多简单啊!Spring Boot通过简单地为您的应用程序配置和部署嵌入式Web服务器来满足您的其余需求。

Spring的主入口类是以@SpringBootApplication标注.

@SpringBootApplication
public class MyApplication {
 public static void main(String[] args) {
 SpringApplication.run(MyApplication.class, args);
 }
}

同时这个类也是Java的main类,SpringBoot打成Jar包是一种胖jar,兼容标准的Jar包,它的 MANIFEST.MF格式如下:

Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.mycompany.project.MyApplication

也可以打包成可执行的war 包,MANIFEST.MF格式如下:

Main-Class: org.springframework.boot.loader.WarLauncher
Start-Class: com.mycompany.project.MyApplication
 

内嵌服务器

SpringBoot内嵌默认是Tomcat,还有Jetty等其他服务器可以选择,tomcat配置不像过去那样我们可以直接配置,需要通过SpringBoot去配置和调度。过去的模式是:先启动服务器,再启动war应用,服务就启动了;现在的模式是直接启动服务就可以使用了。一个tomcat服务器=一个微服务。

Spring cloud的基础

Spring cloud是实现分布式微服务的组件,它的基础就是一个个Spring Boot微服务,比如服务发现就是一个嵌入了Eureka组件的Spring Boot,而服务网关则是嵌入了Zuul组件的Spring Boot,别问是如何嵌入这些组件的,在上面自动配置有讲述。

Spring Boot与Spring MVC与Spring的区别

许多对Spring Boot知之甚少的人在使用和部署这三种Spring技术时都会感到困惑。因此,了解它们的使用时间和地点变得极为重要。

  • Spring框架:Spring Framework 的作用是提供一种依赖,也称为控制反转(IOC)。当适当使用IOC时,它有助于开发易于测试和使用的松散耦合应用程序。
  • Spring MVC:它提供了一种设计Web应用程序的分离方式。通过View Resolver,Dispatcher Servlet和ModelAndView 等简单概念,开发人员可以开发应用程序而不会消耗太多时间。
  • Spring Boot:Spring Boot通过自动配置数据源进行智能工作。它还可以处理启动项目,从而无需编写注释,样板代码和XML配置,从而提高了工作效率并减少了开发人员的工作量。


Tags:Spring Boot   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言一个基于spring boot的JAVA开源商城系统,是前后端分离、为生产环境多实例完全准备、数据库为b2b2c商城系统设计、拥有完整下单流程和精美设计的java开源商城系统https://...【详细内容】
2021-09-17  Tags: Spring Boot  点击:(119)  评论:(0)  加入收藏
在 Java 和 Kotlin 中, 除了使用Spring Boot创建微服务外,还有很多其他的替代方案。 名称 版本 发布时间 开发商 GitHub ...【详细内容】
2021-08-06  Tags: Spring Boot  点击:(175)  评论:(0)  加入收藏
大家都知道,MyBatis 框架是一个持久层框架,是 Apache 下的顶级项目。Mybatis 可以让开发者的主要精力放在 sql 上,通过 Mybatis 提供的映射方式,自由灵活的生成满足需要的 sql 语句。使用简单的 XML 或注解来配置和映射原...【详细内容】
2021-07-06  Tags: Spring Boot  点击:(96)  评论:(0)  加入收藏
首先,先看 SpringBoot 的主配置类:@SpringBootApplicationpublicclassStartEurekaApplication{publicstaticvoidmain(String[] args){SpringApplication.run(StartEurekaAppli...【详细内容】
2021-06-11  Tags: Spring Boot  点击:(144)  评论:(0)  加入收藏
今天又要给大家介绍一个 Spring Boot 中的组件 --HandlerMethodReturnValueHandler。在前面的文章中(如何优雅的实现 Spring Boot 接口参数加密解密?),松哥已经和大家介绍过如何...【详细内容】
2021-03-24  Tags: Spring Boot  点击:(297)  评论:(0)  加入收藏
环境:SpringBoot2.3.9.RELEASE + SpringBootAdmin2.3.1说明:如果使用SpringBootAdmin2.4.*版本那么SpringBoot的版本也必须是2.4.*否则启动报错。Spring Boot Admin(SBA)是一个...【详细内容】
2021-03-22  Tags: Spring Boot  点击:(350)  评论:(0)  加入收藏
要让项目实现 ssl 免密登录,首先需要开启 https 。所以先从 Spring Boot 如何开启 https 说起。创建服务端证书为了开启 https ,我们需要一份证书。实际开发中,会在网上申请一...【详细内容】
2021-01-07  Tags: Spring Boot  点击:(159)  评论:(0)  加入收藏
短信发送”功能在企业应用系统开发中应该说算是很常见的了,典型的案例 如 “用户登录时可以通过手机号接收平台发送的验证码进行登录”、“用户通过手机号接收平台发送的短信...【详细内容】
2020-12-31  Tags: Spring Boot  点击:(186)  评论:(0)  加入收藏
在平常的开发过程中,我们经常需要对接口响应时间进行优化,但是呢个人感觉每次都去看浏览器的网络请求比较麻烦,因此,小编自己自己手写代码实现在控制台打印接口响应时间,这样非常...【详细内容】
2020-12-23  Tags: Spring Boot  点击:(713)  评论:(0)  加入收藏
前言在一个高并发系统中对流量的把控是非常重要的,当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用,不处理的话甚至会造成整个应用不可用。那么何为限流呢?顾...【详细内容】
2020-12-15  Tags: Spring Boot  点击:(121)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条