Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
Spring Boot 最重要的功能是:自动配置。为什么说是自动配置?
Spring Boot 的开启注解是:@SpringBootApplication,其实它就是由下面三个注解组成的:@Configuration,@ComponentScan,@EnableAutoConfiguration
上面三个注解,前面两个都是 Spring 自带的,和 Spring Boot 无关,所以说 Spring Boot 最最核心的就是这个 @EnableAutoConfiguration 注解了,它能根据类路径下的 jar 包和配置动态加载配置和注入 bean。
举个例子,比如我在 lib 下放一个 druid 连接池的 jar 包,然后在 application.yml 文件配置 druid 相关的参数,Spring Boot 就能够自动配置所有我们需要的东西,如果我把 jar 包拿掉或者把参数去掉,那 Spring Boot 就不会自动配置。
这样我们就能把许多功能做成公共的自动配置的启动器(starters),其实 druid 连接池就是这么做的,它提供了针对 Spring Boot 的启动器:druid-spring-boot-starter。
有了这个自动配置的启动器,我们就能非常简单的使用它,
先添加 jar 包依赖:
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.1.10version>
dependency>
再添加相关参数:
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
……
如果是传统的项目,我们要自己手动写一大堆的配置,而且还不灵活,有了这个启动器,我们就可以做到简单集成。
Spring Boot 中有以下两种配置文件:bootstrap.properties(bootstrap.yml) 和 application.properties(application.yml)。
application 配置文件主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
.properties 和 .yml,它们的区别主要是书写格式不同。其中,.yml 格式不支持 @PropertySource 注解导入配置。
启动类上面的注解是 @SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
可以不需要,内置了 Tomcat / Jetty 等容器。
cn
+- javastack
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
这个目录结构是主流及推荐的做法,而在主入口类上加上 @SpringBootApplication 注解来开启 Spring Boot 的各项能力,如自动配置、组件扫描等。
Starters 可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
Starters 包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。
可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。
Spring Boot 可以通过 @PropertySource,@Value,@Environment,@ConfigurationProperties 来绑定变量。
具体可参考:Spring Boot读取配置的几种方式
Spring Boot 支持 Java Util Logging,Log4j2,Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。
所谓热部署,就是当应用正在运行时,升级软件不需要重启应用。就比如我们修改了代码的某一部分,不需要再次启动程序,并等启动完毕后再到浏览器刷新。有了热部署,我们只需启动一次程序,当有了修改后,只需刷新就好。
主要有两种方式:
Spring Boot 提供多套配置文件,在运行时可以指定具体的配置文件。
具体可参考:Spring Boot - Profile不同环境配置
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
约定优于配置是 Spring Boot 整个框架的核心思想。
约定优于配置,也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。
总结就是两点:
这样做的好处就是,如果约定的默认配置符合我们的要求,省略即可,反之,再进行额外配置。
从 Spring Boot 中提供的默认的配置文件(application.properties/yml),再到默认值自动配置,都可以看出约定带来的便利,以及节省大量的配置。
Spring Boot actuator 是 spring 启动框架中的重要功能之一。Spring Boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息,所以监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。
在 Spring 程序 main 方法中,添加 @SpringBootApplication 或者 @EnableAutoConfiguration
会自动去 maven 中读取每个 starter 中的 spring.factories 文件,该文件里配置了所有需要被创建 spring 容器中的 bean。
参考:吐血整理 20 道 Spring Boot 面试题,我经常拿来面试别人!
Spring Boot 面试,一个问题就干趴下了!
Spring Boot 面试,一个问题就干趴下了!(下)
Spring boot面试题整理