文章目录
- PartA
- PartB
- 更多请参考来源
PartA
1 什么是springboot ?
用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
创建独立的spring引用程序 main方法运行
嵌入的Tomcat 无需部署war文件
简化maven配置
自动配置spring添加对应功能starter自动化配置
答:spring boot来简化spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用
2 Springboot 有哪些优点?
-
快速创建独立运行的spring项目与主流框架集成
-
使用嵌入式的servlet容器,应用无需打包成war包
-
starters自动依赖与版本控制
-
大量的自动配置,简化开发,也可修改默认值
-
准生产环境的运行应用监控
-
与云计算的天然集成
3 如何重新加载Spring Boot上的更改,而无需重新启动服务器?
这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。
Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。
开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。
这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
org.springframework.boot
spring-boot-devtools
true
4 Spring Boot、Spring MVC 和 Spring 有什么区别?
1、Spring
Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。
当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
2、Spring MVC
Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。
3、SpringBoot
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。
5 什么是自动配置?
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
我们能否带来更多的智能?当一个 MVC JAR 添加到应用程序中的时候,我们能否自动配置一些 beans?
Spring 查看(CLASSPATH 上可用的框架)已存在的应用程序的配置。在此基础上,Spring Boot 提供了配置应用程序和框架所需要的基本配置。这就是自动配置。
6 什么是 Spring Boot Stater ?
启动器是一套方便的依赖没描述符,它可以放在自己的程序中。你可以一站式的获取你所需要的 Spring 和相关技术,而不需要依赖描述符的通过示例代码搜索和复制黏贴的负载。
例如,如果你想使用 Sping 和 JPA 访问数据库,只需要你的项目包含 spring-boot-starter-data-jpa 依赖项,你就可以完美进行。
7 能否举一个例子来解释更多 Staters 的内容?
让我们来思考一个 Stater 的例子 -Spring Boot Stater Web。
如果你想开发一个 web 应用程序或者是公开 REST 服务的应用程序。Spring Boot Start Web 是首选。让我们使用 Spring Initializr 创建一个 Spring Boot Start Web 的快速项目。
Spring Boot Start Web 的依赖项
下面的截图是添加进我们应用程序的不同的依赖项
依赖项可以被分为:
- Spring - core,beans,context,aop
- Web MVC - (Spring MVC)
- Jackson - for JSON Binding
- Validation - Hibernate,Validation API
- Enbedded Servlet Container - Tomcat
- Logging - logback,slf4j
任何经典的 Web 应用程序都会使用所有这些依赖项。Spring Boot Starter Web 预先打包了这些依赖项。
作为一个开发者,我不需要再担心这些依赖项和它们的兼容版本。
8 Spring Boot 还提供了其它的哪些 Starter Project Options?
Spring Boot 也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。
- spring-boot-starter-web-services - SOAP Web Services;
- spring-boot-starter-web - Web 和 RESTful 应用程序;
- spring-boot-starter-test - 单元测试和集成测试;
- spring-boot-starter-jdbc - 传统的 JDBC;
- spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能;
- spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权;
- spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA;
- spring-boot-starter-data-rest - 使用 Spring Data REST 公布简单的 REST 服务;
9 创建一个 Spring Boot Project 的最简单的方法是什么?
Spring Initializr是启动 Spring Boot Projects 的一个很好的工具。
就像上图中所展示的一样,我们需要做一下几步:
1、登录 Spring Initializr,按照以下方式进行选择:
2、选择 com.in28minutes.springboot 为组
3、选择 studet-services 为组件
4、选择下面的依赖项
Web
Actuator
DevTools
5、点击生 GenerateProject
6、将项目导入 Eclipse。文件 - 导入 - 现有的 Maven 项目
10 Spring Initializr 是创建 Spring Boot Projects 的唯一方法吗?
不是的。
Spring Initiatlizr 让创建 Spring Boot 项目变的很容易,但是,你也可以通过设置一个 maven 项目并添加正确的依赖项来开始一个项目。
在我们的 Spring 课程中,我们使用两种方法来创建项目。
第一种方法是 start.spring.io 。
另外一种方法是在项目的标题为“Basic Web Application”处进行手动设置。
手动设置一个 maven 项目
这里有几个重要的步骤:
1、在 Eclipse 中,使用文件 - 新建 Maven 项目来创建一个新项目
2、添加依赖项。
3、添加 maven 插件。
4、添加 Spring Boot 应用程序类。
到这里,准备工作已经做好!
11 为什么我们需要 spring-boot-maven-plugin?
spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。
1、spring-boot:run 运行你的 SpringBooty 应用程序。
2、spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可执行
3、spring-boot:start 和 spring-boot:stop 管理 Spring Boot 应用程序的生命周期(也可以说是为了集成测试)。
4、spring-boot:build-info 生成执行器可以使用的构造信息。
12 如何使用 SpringBoot 自动重装我的应用程序?
使用 Spring Boot 开发工具。
把 Spring Boot 开发工具添加进入你的项目是简单的。
把下面的依赖项添加至你的 Spring Boot Project pom.xml 中
重启应用程序,然后就可以了。
同样的,如果你想自动装载页面,有可以看看 FiveReload
http://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-live-reload/.
在我测试的时候,发现了 LiveReload 漏洞,如果你测试时也发现了,请一定要告诉我们。
13 Spring Boot中的监视器是什么?
Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。
14 什么是YAML?
YAML是一种人类可读的数据序列化语言。它通常用于配置文件。
与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。
15 springboot自动配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean
16 如何在 Spring Boot 中禁用 Actuator 端点安全性?
默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。
我们可以使用management.security.enabled = false来禁用安全性。
只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
17 springboot集成mybatis的过程
添加mybatis的starter maven依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
在mybatis的接口中 添加@Mapper注解
在application.yml配置数据源信息
18 什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
思考一下在你的虚拟机上部署应用程序需要些什么。
第一步:安装 Java
第二步:安装 Web 或者是应用程序的服务器(Tomat/Wbesphere/Weblogic 等等)
第三步:部署应用程序 war 包
如果我们想简化这些步骤,应该如何做呢?
让我们来思考如何使服务器成为应用程序的一部分?
你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了,
这个想法是嵌入式服务器的起源。
当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。
例如,对于一个 Spring Boot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应用程序 jar。你就可以想运行正常 Java 应用程序一样来运行 web 应用程序了。
嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。
19 如何在 Spring Boot 中添加通用的 JS 代码?
在源文件夹下,创建一个名为 static 的文件夹。然后,你可以把你的静态的内容放在这里面。
例如,myapp.js 的路径是 resources\static\js\myapp.js
你可以参考它在 jsp 中的使用方法:
错误:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
该如何来修复这个错误呢?
两种方法:
方法 1:关闭安全验证
application.properties
management.security.enabled:FALSE
方法二:在日志中搜索密码并传递至请求标头中
20 什么是 Spring Data?
来自://projects.spring.io/spring- data/
Spring Data 的使命是在保证底层数据存储特殊性的前提下,为数据访问提供一个熟悉的,一致性的,基于 Spring 的编程模型。这使得使用数据访问技术,关系数据库和非关系数据库,map-reduce 框架以及基于云的数据服务变得很容易。
为了让它更简单一些,Spring Data 提供了不受底层数据源限制的 Abstractions 接口。
下面来举一个例子:
你可以定义一简单的库,用来插入,更新,删除和检索代办事项,而不需要编写大量的代码。
21 什么是 Spring Data REST?
Spring Data TEST 可以用来发布关于 Spring 数据库的 HATEOAS RESTful 资源。
下面是一个使用 JPA 的例子:
不需要写太多代码,我们可以发布关于 Spring 数据库的 RESTful API。
下面展示的是一些关于 TEST 服务器的例子
POST:URL:http://localhost:8080/todosUse Header:Content-Type:Type:application/jsonRequest Content
代码如下:
响应内容:
响应包含新创建资源的 href。
22 path=”users”, collectionResourceRel=”users” 如何与 Spring Data Rest 一起使用?
path- 这个资源要导出的路径段。
collectionResourceRel- 生成指向集合资源的链接时使用的 rel 值。在生成 HATEOAS 链接时使用。
23 当 Spring Boot 应用程序作为 Java 应用程序运行时,后台会发生什么?
如果你使用 Eclipse IDE,Eclipse maven 插件确保依赖项或者类文件的改变一经添加,就会被编译并在目标文件中准备好!在这之后,就和其它的 Java 应用程序一样了。
当你启动 java 应用程序的时候,spring boot 自动配置文件就会魔法般的启用了。
当 Spring Boot 应用程序检测到你正在开发一个 web 应用程序的时候,它就会启动 tomcat。
24 我们能否在 spring-boot-starter-web 中用 jetty 代替 tomcat?
在 spring-boot-starter-web 移除现有的依赖项,并把下面这些添加进去。
25 如何使用 Spring Boot 生成一个 WAR 文件?
推荐阅读:
https://spring.io/guides/gs/convert-jar-to-war/
下面有 spring 说明文档直接的链接地址:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging
26 如何使用 Spring Boot 部署到不同的服务器?
你需要做下面两个步骤:
在一个项目中生成一个 war 文件。
将它部署到你最喜欢的服务器(websphere 或者 Weblogic 或者 Tomcat and so on)。
第一步:这本入门指南应该有所帮助:
https://spring.io/guides/gs/convert-jar-to-war/
第二步:取决于你的服务器。
27 SpringBoot与SpringCloud 区别
SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。
28 为什么我们不建议在实际的应用程序中使用 Spring Data Rest?
我们认为 Spring Data Rest 很适合快速原型制造!在大型应用程序中使用需要谨慎。
通过 Spring Data REST 你可以把你的数据实体作为 RESTful 服务直接发布。
当你设计 RESTful 服务器的时候,最佳实践表明,你的接口应该考虑到两件重要的事情:
你的模型范围。
你的客户。
通过 With Spring Data REST,你不需要再考虑这两个方面,只需要作为 TEST 服务发布实体。
这就是为什么我们建议使用 Spring Data Rest 在快速原型构造上面,或者作为项目的初始解决方法。对于完整演变项目来说,这并不是一个好的注意。
29 在 Spring Initializer 中,如何改变一个项目的包名字?
好消息是你可以定制它。点击链接“转到完整版本”。你可以配置你想要修改的包名称!
30 JPA 和 Hibernate 有哪些区别?
简而言之
JPA 是一个规范或者接口
Hibernate 是 JPA 的一个实现
当我们使用 JPA 的时候,我们使用 javax.persistence 包中的注释和接口时,不需要使用 hibernate 的导入包。
我们建议使用 JPA 注释,因为哦我们没有将其绑定到 Hibernate 作为实现。后来(我知道 - 小于百分之一的几率),我们可以使用另一种 JPA 实现。
31 使用 Spring Boot 启动连接到内存数据库 H2 的 JPA 应用程序需要哪些依赖项?
在 Spring Boot 项目中,当你确保下面的依赖项都在类路里面的时候,你可以加载 H2 控制台。
web 启动器
h2
jpa 数据启动器
其它的依赖项在下面:
需要注意的一些地方:
一个内部数据内存只在应用程序执行期间存在。这是学习框架的有效方式。
这不是你希望的真是世界应用程序的方式。
在问题“如何连接一个外部数据库?”中,我们解释了如何连接一个你所选择的数据库。
32 如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?
因为 Spring Boot 是自动配置的。
下面是我们添加的依赖项:
spring-boot-stater-data-jpa 对于 Hibernate 和 JPA 有过渡依赖性。
当 Spring Boot 在类路径中检测到 Hibernate 中,将会自动配置它为默认的 JPA 实现。
33 我们如何连接一个像 MySQL 或者Orcale 一样的外部数据库?
让我们以 MySQL 为例来思考这个问题:
第一步 - 把 mysql 连接器的依赖项添加至 pom.xml
第二步 - 从 pom.xml 中移除 H2 的依赖项
或者至少把它作为测试的范围。
第三步 - 安装你的 MySQL 数据库
更多的来看看这里 -https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql
第四步 - 配置你的 MySQL 数据库连接
配置 application.properties
spring.jpa.hibernate.ddl-auto=none spring.datasource.url=jdbc:mysql://localhost:3306/todo_example spring.datasource.username=todouser spring.datasource.password=YOUR_PASSWORD
第五步 - 重新启动,你就准备好了!
就是这么简单!
34 你能否举一个以 ReadOnly 为事务管理的例子?
当你从数据库读取内容的时候,你想把事物中的用户描述或者是其它描述设置为只读模式,以便于 Hebernate 不需要再次检查实体的变化。这是非常高效的。
35 SpringBoot 实现热部署有哪几种方式?
主要有两种方式:
1、Spring Loaded
2、Spring-boot-devtools
36 开启 Spring Boot 特性有哪几种方式?
1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖
37 Spring Boot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
38 运行 Spring Boot 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
39 你如何理解 Spring Boot 中的 Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
40 Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架.
PartB
1、SpringBoot Starter 的工作原理是什么?
SpringBoot 在启动的时候会干这几件事情:
1、 SpringBoot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。
2、 根据 spring.factories 配置加载 AutoConfigure 类
3、 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context
总结一下,其实就是 SpringBoot 在启动的时候,按照约定去读取 SpringBoot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 SpringBoot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。
这只是简单的三连环问答,不知道有多少同学能够完整的回答出来。
其实 SpringBoot 中有很多的技术点可以挖掘,今天给大家整理了十个高频 SpringBoot 面试题,希望可以在后期的面试中帮助到大家。
2、SpringBoot 的核心配置文件有哪几个?它们的区别是什么?
SpringBoot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件这个容易理解,主要用于 SpringBoot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
一些固定的不能被覆盖的属性;
一些加密/解密的场景;
3、Spring、SpringBoot、SpringMVC的区别?
1、 Spring框架就像一个家族,有众多衍生产品,例如boot、mvc、jpa等等。但他们的基础都是Spring的ioc、aop。ioc提供了依赖注入的容器,aop解决了面向横切面编程,然后在此两者的基础上实现了其它延伸产品的高级功能;
2、 springMVC是基于Servlet的一个MVC框架主要解决WEB开发的问题;
3、 为了简化开发的使用,从而创造性地推出了SpringBoot框架,默认优于配置
4、什么是 Apache Kafka?
Apache Kafka 是一个分布式发布 - 订阅消息系统。它是一个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建分布式应用程序。这是一个 Apache 顶级项目。Kafka 适合离线和在线消息消费。
5、SpringBoot 配置文件的加载顺序
由jar包外向jar包内进行寻找;
优先加载带profile
jar包外部的application-{profile}.properties或application.yml(带spring.profile配置文件
jar包内部的application-{profile}.properties或application.yml(带spring.profile配置文件
再来加载不带profile
jar包外部的application.properties或application.yml(不带spring.profile配置文件
jar包内部的application.properties或application.yml(不带spring.profile配置文件
6、如何在 SpringBoot 中添加通用的 JS 代码?
在源文件夹下,创建一个名为 static 的文件夹。然后,你可以把你的静态的内容放在这里面。
例如,myapp.js 的路径是 resources\static\js\myapp.js
你可以参考它在 jsp 中的使用方法:
错误:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
该如何来修复这个错误呢?
两种方法:
方法 1:关闭安全验证
application.properties
management.security.enabled:FALSE
方法二:在日志中搜索密码并传递至请求标头中
7、SpringBoot 中如何实现定时任务 ?
在 SpringBoot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
8、spring-boot-starter-parent 有什么用 ?
我们都知道,新创建一个 SpringBoot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
1、 定义了 Java 编译版本为 1、8 。
2、 使用 UTF-8 格式编码。
3、 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
4、 执行打包操作的配置。
5、 自动化的资源过滤。
6、 自动化的插件配置。
7、 针对 application、properties 和 application、yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev、properties 和 application-dev、yml。
总结就是打包用的
9、Async异步调用方法
在SpringBoot中使用异步调用是很简单的,只需要在方法上使用@Async注解即可实现方法的异步调用。 注意:需要在启动类加入@EnableAsync使异步调用@Async注解生效。
10、什么是 JavaConfig?
1、 面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
2、 减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
3、 类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
11、如何使用SpringBoot实现分页和排序?
使用SpringBoot实现分页非常简单。使用Spring Data-JPA可以实现将可分页的
传递给存储库方法。
12、运行 SpringBoot 有哪几种方式?
1、 打包用命令或者者放到容器中运行
2、 用 Maven/ Gradle 插件运行
3、 直接执行 main 方法运行
13、什么是Swagger?你用SpringBoot实现了它吗?
Swagger广泛用于可视化API,使用Swagger UI为前端开发人员提供在线沙箱。Swagger是用于生成RESTful Web服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过Swagger正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。
14、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 SpringBoot 的核心注解 主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
15、我们如何监视所有 SpringBoot 微服务?
SpringBoot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。它建立在 SpringBoot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。
16、如何在自定义端口上运行 SpringBoot应用程序?
在 application.properties中指定端口serverport=8090。
17、当 SpringBoot 应用程序作为 Java 应用程序运行时,后台会发生什么?
如果你使用 Eclipse IDE,Eclipse maven 插件确保依赖项或者类文件的改变一经添加,就会被编译并在目标文件中准备好!在这之后,就和其它的 Java 应用程序一样了。
当你启动 java 应用程序的时候,spring boot 自动配置文件就会魔法般的启用了。
当 SpringBoot 应用程序检测到你正在开发一个 web 应用程序的时候,它就会启动 tomcat。
18、如何集成 SpringBoot 和 ActiveMQ?
对于集成 SpringBoot 和 ActiveMQ,我们使用依赖关系。它只需要很少的配置,并且不需要样板代码。
19、什么是执行器停机?
关机是允许应用程序正常关机的端点。默认情况下,此功能不启用。你可以在应用程序属性文件中使用management . endpoint . shut down . enabled = true来启用此选项。但是该方法请谨慎使用。
20、SpringBoot常用的starter有哪些?
1、 spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)
2、 spring-boot-starter-data-jpa (数据库支持)
3、 spring-boot-starter-data-Redis (Redis数据库支持)
4、 spring-boot-starter-data-solr (solr搜索应用框架支持)
5、 mybatis-spring-boot-starter (第三方的mybatis集成starter)
21、SpringBoot 如何设置支持跨域请求?
现代浏览器出于安全的考虑, HTTP 请求时必须遵守同源策略,否则就是跨域的 HTTP 请求,默认情况下是被禁止的,IP(域名)不同、或者端口不同、协议不同(比如 HTTP、HTTPS)都会造成跨域问题。
一般前端的解决方案有:
1、 使用 JSONP 来支持跨域的请求,JSONP 实现跨域请求的原理简单的说,就是动态创建
2、 利用反应代理的机制来解决跨域的问题,前端请求的时候先将请求发送到同源地址的后端,通过后端请求转发来避免跨域的访问。
后来 HTML5 支持了 CORS 协议。CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。它通过服务器增加一个特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。
前端使用了 CORS 协议,就需要后端设置支持非同源的请求,SpringBoot 设置支持非同源的请求有两种方式。
第一,配置 CorsFilter。
@Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin(““); config.setAllowCredentials(true); config.addAllowedMethod(””); config.addAllowedHeader(““); config.addExposedHeader(””); UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration(“/**”, config); return new CorsFilter(configSource); } }
需要配置上述的一段代码。第二种方式稍微简单一些。
第二,在启动类上添加:
public class Application extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(“/**”) .allowCredentials(true) .allowedHeaders(““) .allowedOrigins(””) .allowedMethods(“*”); } }
22、SpringBoot多数据源拆分的思路
先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfigurationProperties读取properties中的配置,使用@MapperScan注册到对应的mapper包中
23、SpringBoot 2.X 有什么新特性?与 1.X 有什么区别?
1、 依赖 JDK 版本升级:2.x 里面的许多方法应用了 JDK 8 的许多高级新特性,至少需要 JDK 8 的支持;
2、 第三方类库升:2.x 对第三方类库升级了所有能升级的稳定版本,例如:Spring Framework 5+、Tomcat 8.5+、Hibernate 5.2+、Thymeleaf 3+;
3、 响应式 Spring 编程:2.x 通过启动器和自动配置全面支持 Spring 的响应式编程,响应式编程是完全异步和非阻塞的,它是基于事件驱动模型,而不是传统的线程模型;
4、 连接池:2.x 默认使用 HikariCP 连接池;
5、 json:提供了一个 spring-boot-starter-json 启动器对 JSON 读写的支持;
6、 Quartz:2.x 提供了一个 spring-boot-starter-quartz 启动器对定时任务框架 Quartz 的支持;
7、 HTTP/2 支持:提供对HTTP/2 的支持,如:Tomcat, Undertow, Jetty;
8、 Actuator加强:在 2.x 中,对执行器端点进行了许多改进,所有的 HTTP 执行端点现在都暴露在 /actuator路径下,并对 JSON 结果集也做了改善。
24、spring boot监听器流程?
1、 通过app.addListeners注册进入 2、初始化一个SpringApplicationRunListeners进行处理
3、 从spring.factories中读取监听器处理类EventPublishingRunListener
4、 通过createSpringFactoriesInstances创建监听器处理类实例
5、 调用监听器listeners.starting()的方法来启动。
6、 底层把事件处理交给线程池去处理
25、RequestMapping 和 GetMapping 的不同之处在哪里?
RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。
26、如何实现 SpringBoot 应用程序的安全性?
为了实现 SpringBoot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。
27、什么是 WebSockets?
WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。
1、 WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送。
2、 WebSocket 是全双工的 -客户端和服务器通信是相互独立的。
3、 单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信
4、 Light -与 http 相比,WebSocket 消息数据交换要轻得多。
28、SpringBoot读取配置文件的方式
SpringBoot默认读取配置文件为application.properties或者是application.yml
29、比较一下 Spring Security 和 Shiro 各自的优缺点 ?
由于 SpringBoot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 SpringBoot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 SpringBoot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
Spring Security 功能强大;Shiro 功能简单
30、SpringBoot 中的 starter 到底是什么 ?
首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter
更多请参考来源
SpringBoot面试题及答案
Spring Boot面试题汇总,含答案
SpringBoot面试题及答案整理(最新版)