什么是 Spring Boot?
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。
如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。
因此,开始一个新的spring项目需要很多努力,因为我们现在必须从头开始做所有事情。
Spring Boot是解决这个问题的方法。Spring Boot已经建立在现有spring框架之上。使用spring启动,我们避免了之前我们必须做的所有样板代码和配置。
因此,Spring Boot可以帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。
Spring Boot 有哪些优点?
Spring Boot 主要有如下优点:
容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。开箱即用,远离繁琐的配置。
提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
没有代码生成,也不需要XML配置。使用JavaConfig有助于避免使用XML。
可避免大量的 Maven 导入和各种版本冲突。
没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。
没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。
需要更少的配置 因为没有web.xml文件。只需添加用@ Configuration注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired添加到bean方法中,以使Spring自动装入需要的依赖关系中。
基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring将在(application{environment} .properties)中加载后续的应用程序属性文件。
Spring Boot 运行项目 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
Spring Boot 自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,
@EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。
每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能
spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?
单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时候。
spring boot 核心的两个配置文件:
bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;application (. yml 或者 . properties):由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。什么是 Spring Profiles?Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。
SpringBoot Actuator 是做什么的?
本质上,Actuator 通过启用 production-ready 功能使得 SpringBoot 应用程序变得更有生命力。这些功能允许我们对生产环境中的应用程序进行监视和管理。
集成 SpringBoot Actuator 到项目中非常简单。我们需要做的只是将 spring-boot-starter-actuator starter 引入到 POM.xml 文件当中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
SpringBoot Actuaor 可以使用 HTTP 或者 JMX endpoints来浏览操作信息。大多数应用程序都是用 HTTP,作为 endpoint 的标识以及使用 /actuator 前缀作为 URL路径。
这里有一些常用的内置 endpoints Actuator:
auditevents:查看 audit 事件信息
env:查看 环境变量
health:查看应用程序健康信息
httptrace:展示 HTTP 路径信息
info:展示 arbitrary 应用信息
metrics:展示 metrics 信息
loggers:显示并修改应用程序中日志器的配置
mappings:展示所有 @RequestMapping 路径信息
scheduledtasks:展示应用程序中的定时任务信息
threaddump:执行 Thread Dump
Spring 和 SpringBoot 有什么不同?
Spring 框架提供多种特性使得 web 应用开发变得更简便,包括依赖注入、数据绑定、切面编程、数据存取等等。
随着时间推移,Spring 生态变得越来越复杂了,并且应用程序所必须的配置文件也令人觉得可怕。这就是 Spirng Boot 派上用场的地方了 – 它使得 Spring 的配置变得更轻而易举。
实际上,Spring 是 unopinionated(予以配置项多,倾向性弱) 的,Spring Boot 在平台和库的做法中更 opinionated ,使得我们更容易上手。
这里有两条 SpringBoot 带来的好处:
根据 classpath 中的 artifacts 的自动化配置应用程序
提供非功能性特性例如安全和健康检查给到生产环境中的应用程序
Spring Security 和 Shiro 各自的优缺点 ?
由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单Spring Security 功能强大;Shiro 功能简单
spring-boot-starter-parent 有什么用 ?
我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
定义了 Java 编译版本为 1.8 。
使用 UTF-8 格式编码。
继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在
写依赖时才不需要写版本号。
执行打包操作的配置。
自动化的资源过滤。
自动化的插件配置。
针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
SpringBoot starter 作用在什么地方?
依赖管理是所有项目中至关重要的一部分。当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多 artifacts 了。
这时候 SpringBoot starter 就派上用处了。每一个 stater 都在扮演着提供我们所需的 Spring 特性的一站式商店角色。其他所需的依赖以一致的方式注入并且被管理。
所有的 starter 都归于 org.springframework.boot 组中,并且它们都以由 spring-boot-starter- 开头取名。这种命名方式使得我们更容易找到 starter 依赖,特别是当我们使用那些支持通过名字查找依赖的 IDE 当中。
目前已经有超过50个 starter了,其中最常用的是:
spring-boot-starter:核心 starter,包括自动化配置支持,日志以及 YAML
spring-boot-starter-aop:Spring AOP 和 AspectJ 相关的切面编程 starter
spring-boot-starter-data-jpa:使用 Hibernate Spring Data JPA 的 starter
spring-boot-starter-jdbc:使用 HikariCP 连接池 JDBC 的 starter
spring-boot-starter-security:使用 Spring Security 的 starter
spring-boot-starter-test:SpringBoot 测试相关的 starter
spring-boot-starter-web:构建 restful、springMVC 的 web应用程序的 starter
SpringBoot DevTools 的用途是什么?
SpringBoot 开发者工具,或者说 DevTools,是一系列可以让开发过程变得简便的工具。为了引入这些工具,我们只需要在 POM.xml 中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
spring-boot-devtools 模块在生产环境中是默认禁用的,archives 的 repackage 在这个模块中默认也被排除。因此,它不会给我们的生产环境带来任何开销。
通常来说,DevTools 应用属性适合于开发环境。这些属性禁用模板缓存,启用 web 组的调试日志记录等等。最后,我们可以在不设置任何属性的情况下进行合理的开发环境配置。
每当 classpath 上的文件发生更改时,使用 DevTools 的应用程序都会重新启动。这在开发中非常有用,因为它可以为修改提供快速的反馈。
默认情况下,像视图模板这样的静态资源修改后是不会被重启的。相反,资源的更改会触发浏览器刷新。注意,只有在浏览器中安装了 LiveReload 扩展并以与 DevTools 所包含的嵌入式 LiveReload 服务器交互时,才会发生。

关注面试哥公众号,获取更多面试题答案与学习资料。




