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


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

文章插图

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/tempspring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialectspring.jpa.hibernate.ddl-auto=update这就具体指明了JPA实现使用Hibernate , 具体数据库时MySQL 。
Spring Cloud中各个组件的配置基本都是在这里实现 , 基本无需写任何代码就可以实现服务网关、服务发现和负载平衡以及断路器功能 。


推荐阅读