什么是Spring Boot?

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

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

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

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

Spring Boot组件

  1. Spring Boot自动配置: Spring启动能够检测某些框架的可用性,例如Spring Data JPA,Spring Batch,Hibernate和JDBC。一旦检测到框架,它将自动配置它。
  2. Spring Boot Core:是其他Spring模型的基础。它提供了某些功能,可以通过验证自行完成。
  3. 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配置,从而提高了工作效率并减少了开发人员的工作量。

 

专门文章

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应用实现Docker镜像

DDD实践:在SpringBoot中跨微服务通过发件箱模式实现分布式事务机制 - Hans-Peter Grahsl

#Spring Boot

相关专题

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

Spring Data JDBC教程