什么是Spring Boot?

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

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

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

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

   Spring Boot有下面几个特点:

  1. 用来实现微服务;
  2. 独立打包 直接运行
  3. 自动配置
  4. 自定义配置
  5. 模块化
  6. 内嵌服务器
  7. Spring cloud的基础

实现微服务

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

独立打包

   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

 

自动配置

  @SpringBootApplication标注有下列公式:

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

  Spring Boot会根据添加的maven的pom.xml的依赖项自动配置加载相应的依赖组件,它能智能感知上下文。

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


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

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

@ComponentScan是用于自动扫描包,如果不明确声明,只使用@SpringBootApplication,那么就扫描当前所在的包和子包。

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

自定义配置

 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实现模块化

内嵌服务器

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

Spring cloud的基础

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

 

专门文章

Spring Boot的Component Scan原理

Spring Boot中的@EnableAutoConfiguration原理

如何在Spring Boot中创建自己的启动器?

Spring Boot和Spring区别?

spring-boot-starter-parent简介

Spring Initializr快速启动Spring Boot应用!

Spring Boot @ImportResource注释示例

ResponseEntity和ResponseBody以及ResponseStatus区别

@RequestMapping与@GetMapping和@PostMapping等新注释

在spring-boot rest api中传递和验证@RequestParam

API文档先行还是API编码先行?

使用Swagger和SpringFox文档化Spring Boot REST API

使用Spring Boot Security Starter加密REST服务

Spring Boot Actuator简介

在Spring Boot中读取application.properties

Spring Boot和内存数据库中H2的使用教程

使用Spring Boot 2和Spring Data JPA实现审计

SpringBoot过滤器

在Spring Boot中使用流程引擎Activiti

Spring Boot Admin 快速指南

使用Activiti和Spring集成完成BPEL和BPM

Spring Boot + Spring Data JPA + Oracle教程示例

Spring Data JDBC教程

#Spring Boot

相关专题

Spring Cloud 微服务专题 Spring专题 Spring Batch批处理