Spring⾯试题汇总3:SpringBoot⾯试题及答案整理
1、什么是 Spring Boot?
多年来,随着新功能的增加,spring 变得越来越复杂。访问spring官⽹页⾯,我们就会看到可以在我们的应⽤程序中使⽤的所有 Spring 项⽬的不同功能。如果必须启动⼀个新的 Spring 项⽬,我们必须添加构建路径或添加 Maven 依赖关系,配置应⽤程序服务器,添加spring 配置。因此,开始⼀个新的 spring 项⽬需要很多努⼒,因为我们现在必须从头开始做所有事情。
Spring Boot 是解决这个问题的⽅法。Spring Boot 已经建⽴在现有 spring 框架之上。使⽤ spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以帮助我们以最少的⼯作量,更加健壮地使⽤现有的 Spring功能。
2、Spring Boot 有哪些优点?
Spring Boot 的优点有:
1、减少开发,测试时间和努⼒。
2、使⽤ JavaConfig 有助于避免使⽤ XML。
3、避免⼤量的 Maven 导⼊和各种版本冲突。
4、提供意见发展⽅法。
5、通过提供默认值快速开始开发。
6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish或其他任何东西。
7、需要更少的配置 因为没有 l ⽂件。只需添加⽤@ Configuration 注释的类,然后添加⽤@Bean 注释的⽅法,Spring 将⾃动加载对象并像以前⼀样对其进⾏管理。您甚⾄可以将@Autowired 添加到 bean ⽅法中,以使 Spring ⾃动装⼊需要的依赖关系中。
8、基于环境的配置 使⽤这些属性,您可以将您正在使⽤的环境传递到应⽤程序:-Dspring.profiles.active = {enviornment}。在加载主应⽤程序属性⽂件后,Spring 将在(application{environment} .properties)中加载后续的应⽤程序属性⽂件。linux教程电子书学习
3、Spring 和 SpringBoot 有什么不同?
Spring 框架提供多种特性使得 web 应⽤开发变得更简便,包括依赖注⼊、数据绑定、切⾯编程、数据存取等等。
随着时间推移,Spring ⽣态变得越来越复杂了,并且应⽤程序所必须的配置⽂件也令⼈觉得可怕。这就是 Spirng Boot 派上⽤场的地⽅了– 它使得 Spring 的配置变得更轻⽽易举。
实际上,Spring 是 unopinionated(予以配置项多,倾向性弱) 的,Spring Boot 在平台和库的做法中更 opinionated ,使得我们更容易上⼿。
这⾥有两条 SpringBoot 带来的好处:
根据 classpath 中的 artifacts 的⾃动化配置应⽤程序
提供⾮功能性特性例如安全和健康检查给到⽣产环境中的应⽤程序
4、如何重新加载 Spring Boot 上的更改,⽽⽆需重新启动服务器?
这可以使⽤ DEV ⼯具来实现。通过这种依赖关系,您可以节省任何更改,嵌⼊式tomcat 将重新启动。Spring Boot 有⼀个开发⼯具(DevTools)模块,它有助于提⾼开发⼈员的⽣产⼒。Java 开发⼈员⾯临的⼀个主要挑战是将⽂件更改⾃动部署到服务器并⾃动重启服务器。开发⼈员可以重新加载 Spring Boot 上的更改,⽽⽆需重新启动服务器。这将消除每次⼿动部署更改的需要。Spring Boot 在发布它的第⼀个版本时没有这个功能。这是开发⼈员最需要的功能。DevTools 模块完全满⾜开发⼈员的需求。该模块将在⽣产环境中被禁⽤。它还提供 H2 数据库控制台以更好地测试应⽤程序。
booth乘法运算步骤详解<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
5、Spring Boot 中的监视器是什么?
Spring boot actuator 是 spring 启动框架中的重要功能之⼀。Spring boot 监视器可帮助您访问⽣产环境中正在运⾏的应⽤程序的当前状态。有⼏个指标必须在⽣产环境中进⾏检查和监控。即使⼀些外部应⽤程序可能正在使⽤这些服务来向相关⼈员触发警报消息。监视器模块公开了⼀组可直接作为 HTTP URL 访问的REST 端点来检查状态。
6、如何在 Spring Boot 中禁⽤ Actuator 端点安全性?
默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR ⾓⾊的⽤户才能访问它们。安全性是使⽤标准的HttpServletRequest.isUserInRole ⽅法实施的。 我们可以使⽤来禁⽤安全性。只有在执⾏机构端点在防⽕墙后访问时,才建议禁⽤安全性。
7、如何在⾃定义端⼝上运⾏ Spring Boot 应⽤程序?
为了在⾃定义端⼝上运⾏ Spring Boot 应⽤程序,您可以在application.properties 中指定端⼝。server.port = 8090
8、怎么使⽤ Maven 来构建⼀个 SpringBoot 程序?
就像引⼊其他库⼀样,我们可以在 Maven ⼯程中加⼊ SpringBoot 依赖。然⽽,最好是从 spring-boot-starter-parent 项⽬中继承以及声明依赖到 Spring Boot starters。这样做可以使我们的项⽬可以重⽤ SpringBoot 的默认配置。
继承 spring-boot-starter-parent 项⽬依赖很简单 – 我们只需要在 l 中定义⼀个 parent 节点:
1 <parent>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-parent</artifactId>
4 <version>2.1.1.RELEASE</version>
5 </parent>
我们可以在 Maven central 中到 spring-boot-starter-parent 的最新版本。
使⽤ starter ⽗项⽬依赖很⽅便,但并⾮总是可⾏。例如,如果我们公司都要求项⽬继承标准 POM,我们就不能依赖 SpringBoot starter 了。
这种情况,我们可以通过对 POM 元素的依赖管理来处理:
1 <dependencyManagement>
2 <dependencies>
3 <dependency>
4 <groupId>org.springframework.boot</groupId>
5 <artifactId>spring-boot-dependencies</artifactId>
6 <version>2.1.1.RELEASE</version>
7 <type>pom</type>
8 <scope>import</scope>
9 </dependency>
10 </dependencies>
11 </dependencyManagement>
css动画效果怎么设置最后,我们可以添加 SpringBoot starter 中⼀些依赖,然后我们就可以开始了。
9、如何实现 Spring Boot 应⽤程序的安全性?
为了实现 Spring Boot 的安全性,我们使⽤ spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其⽅法。
10、如何集成 Spring Boot 和 ActiveMQ?
对于集成 Spring Boot 和 ActiveMQ,我们使⽤依赖关系。 它只需要很少的配置,并且不需要样板代码。
11、如何使⽤ Spring Boot 实现分页和排序?
使⽤ Spring Boot 实现分页⾮常简单。使⽤ Spring Data-JPA 可以实现将可分页的传递给存储库⽅法。
12、如何使⽤ Spring Boot 实现异常处理?
Spring 提供了⼀种使⽤ ControllerAdvice 处理异常的⾮常有⽤的⽅法。 我们通过实现⼀个 ControlerAdvice 类,来处理控制器类抛出的所有异常。
13、我们如何监视所有 Spring Boot 微服务?
Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应⽤程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运⾏很有帮助。但是,使⽤监视器的⼀个主要缺点或困难是,我们必须单独打开应⽤程序的知识点以了解其状态或健康状况。想象⼀下涉及 50 个应⽤程序的微服务,管理员将不得不击中所有 50 个应⽤程序的执⾏终端。为了帮助我们处理这种情况,我们将使⽤位于的开源项⽬。 它建⽴在 Spring Boot Actuator 之上,它提供了⼀个 Web UI,使我们能够可视化多个应⽤程序的度量。
14、什么是 Swagger?你⽤ Spring Boot 实现了它吗?
Swagger ⼴泛⽤于可视化 API,使⽤ Swagger UI 为前端开发⼈员提供在线沙箱。Swagger 是⽤于⽣成 RESTful Web 服务的可视化表⽰的⼯具,规范和完整框架实现。它使⽂档能够以与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使⽤最少量的实现逻辑来理解远程服务并与其进⾏交互。因此,Swagger消除了调⽤服务时的猜测。
15、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
16、怎么禁⽤某些⾃动配置特性?
如果我们想禁⽤某些⾃动配置特性,可以使⽤ @EnableAutoConfiguration 注解的 exclude 属性来指明。例如,下⾯的代码段是
使 DataSourceAutoConfiguration ⽆效:
1 // other annotations
2 @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
3 public class MyConfiguration { }
如果我们使⽤ @SpringBootApplication 注解 — 那个将 @EnableAutoConfiguration 作为元注解的项,来启⽤⾃动化配置,我们能够使⽤相同名字的属性来禁⽤⾃动化配置:
1 // other annotations
2 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
3 public class MyConfiguration { }
我们也能够使⽤ lude 环境属性来禁⽤⾃动化配置。application.properties 中的这项配置能够像以前那样做同样的事情:
lude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
17、怎么注册⼀个定制的⾃动化配置?
为了注册⼀个⾃动化配置类,我们必须在 META-INF/spring.factories ⽂件中的 EnableAutoConfigurati
on 键下列出它的全限定名:org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration
如果我们使⽤ Maven 构建项⽬,这个⽂件需要放置在在 package 阶段被写⼊完成的 resources/META-INF ⽬录中。
18、当 bean 存在的时候怎么置后执⾏⾃动配置?
为了当 bean 已存在的时候通知⾃动配置类置后执⾏,我们可以使⽤ @ConditionalOnMissingBean 注解。这个注解中最值得注意的属性是:
value:被检查的 beans 的类型lineargradient是什么意思
name:被检查的 beans 的名字
当将 @Bean 修饰到⽅法时,⽬标类型默认为⽅法的返回类型:
1 @Configuration
2 public class CustomConfiguration {
3 @Bean
4 @ConditionalOnMissingBean
5 public CustomService service() { ... }
6 }
19、怎么将 SpringBoot web 应⽤程序部署为 JAR 或 WAR ⽂件?
通常,我们将 web 应⽤程序打包成 WAR ⽂件,然后将它部署到另外的服务器上。这样做使得我们能够在相同的服务器上处理多个项⽬。当 CPU 和内存有限的情况下,这是⼀种最好的⽅法来节省资源。
然⽽,事情发⽣了转变。现在的计算机硬件相⽐起来已经很便宜了,并且现在的注意⼒⼤多转移到服务器配置上。部署中对服务器配置的⼀个细⼩的失误都会导致⽆可预料的灾难发⽣。
Spring 通过提供插件来解决这个问题,也就是 spring-boot-maven-plugin 来打包 web 应⽤程序到⼀个
额外的 JAR ⽂件当中。为了引⼊这个插件,只需要在 l 中添加⼀个 plugin 属性:inarray比for循环快
1 <plugin>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-maven-plugin</artifactId>
4 </plugin>
有了这个插件,我们会在执⾏ package 步骤后得到⼀个 JAR 包。这个 JAR 包包含所需的所有依赖以及⼀个嵌⼊的服务器。因此,我们不再需要担⼼去配置⼀个额外的服务器了。
我们能够通过运⾏⼀个普通的 JAR 包来启动应⽤程序。
注意⼀点,为了打包成 JAR ⽂件,l 中的 packgaing 属性必须定义为 jar:
<packaging>jar</packaging>
如果我们不定义这个元素,它的默认值也为 jar。
如果我们想构建⼀个 WAR ⽂件,将 packaging 元素修改为 war:
<packaging>war</packaging>
并且将容器依赖从打包⽂件中移除:
1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-tomcat</artifactId>
4 <scope>provided</scope>
5 </dependency>
执⾏ Maven 的 package 步骤之后,我们得到⼀个可部署的 WAR ⽂件。
20、怎么使⽤ SpringBoot 去执⾏命令⾏程序?
像其他 Java 程序⼀样,⼀个 SpringBoot 命令⾏程序必须要有⼀个 main ⽅法。这个⽅法作为⼀个⼊⼝点,通过调
⽤ SpringApplication#run ⽅法来驱动程序执⾏:
1 @SpringBootApplication
2 public class MyApplication {
3 public static void main(String[] args) {
4 SpringApplication.run(MyApplication.class);
5 // other statements
6 }
7 }
SpringApplication 类会启动⼀个 Spirng 容器以及⾃动化配置 beans。
要注意的是我们必须把⼀个配置类传递到 run ⽅法中作为⾸要配置资源。按照惯例,这个参数⼀般是⼊⼝类本⾝。
在调⽤ run ⽅法之后,我们可以像平常的程序⼀样执⾏其他语句。
21、有什么外部配置的可能来源?
web前端基础面试题SpringBoot 对外部配置提供了⽀持,允许我们在不同环境中运⾏相同的应⽤。我们可以使⽤ properties ⽂件、YAML ⽂件、环境变量、系统参数和命令⾏选项参数来声明配置属性。
然后我们可以通过 @Value 这个通过 @ConfigurationProperties 绑定的对象的注解或者实现 Enviroment 来访问这些属性。
以下是最常⽤的外部配置来源:
命令⾏属性:命令⾏选项参数是以双连字符(例如,=)开头的程序参数,例如 –server.port=8080。SpringBoot将所有参数转换为属性并且添加到环境属性当中。
应⽤属性:应⽤属性是指那些从 application.properties ⽂件或者其 YAML 副本中获得的属性。默认情况下,SpringBoot会从当前⽬录、classpath 根⽬录或者它们⾃⾝的 config ⼦⽬录下搜索该⽂件。
特定 profile 配置:特殊概要配置是从 application-{profile}.properties ⽂件或者⾃⾝的 YAML 副本。{profile} 占位符引⽤⼀个在⽤的 profile。这些⽂件与⾮特定配置⽂件位于相同的位置,并且优先于它们。
22、SpringBoot ⽀持松绑定代表什么?
SpringBoot中的松绑定适⽤于配置属性的类型安全绑定。使⽤松绑定,环境属性的键不需要与属性名完全匹配。这样就可以⽤驼峰式、短横线式、蛇形式或者下划线分割来命名。
例如,在⼀个有 @ConfigurationProperties 声明的 bean 类中带有⼀个名为 myProp 的属性,它可以绑定到以下任何⼀个参数
中,myProp、 my-prop、my_prop 或者 MY_PROP。
23、SpringBoot DevTools 的⽤途是什么?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论