SpringBoot面试相关

目录

1、什么是SpringBoot?

多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。因此,开始一个新的spring项目需要很多努力,因为我们现在必须从头开始做所有事情。
SpringBoot是解决这个问题的方法。
SpringBoot已经建立在现有spring框架之上。使用spring启动,我们避免了之前我们必须做的所有样板代码和配置。因此,SpringBoot可以帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。

2、为什么要用SpringBoot

SpringBoot优点非常多,如:
 独立运行
SpringBoot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,SpringBoot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。
 简化配置
spring-boot-starter-web启动器自动依赖其他组件,简少了maven的配置。
 自动配置
SpringBoot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其他配置。
 无代码生成和XML配置
SpringBoot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。
 应用监控

3、SpringBoot提供一系列端点可以监控服务及应用,做健康检测

 减少开发,测试时间。
 使用JavaConfig有助于避免使用XML。
 避免大量的Maven导入和各种版本冲突。
 提供意见发展方法。
 通过提供默认值快速开始开发。
 没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。
 需要更少的配置因为没有web.xml文件。只需添加用@Configuration注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired添加到bean方法中,以使Spring自动装入需要的依赖关系中。
 基于环境的配置使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active={enviornment}。在加载主应用程序属性文件后,Spring将在(application{environment}.properties)中加载后续的应用程序属性文件。

4、SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是SpringBoot的核心注解,主要组合包含了以下3个注解:
@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})。
@ComponentScan:Spring组件扫描

5、运行SpringBoot有哪几种方式

1)打包用命令或者放到容器中运行
2)用Maven/Gradle插件运行
3)直接执行main方法运行

6、如何理解SpringBoot中的Starters?

Starters是什么:
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用SpringJPA访问数据库,只要加入springboot-starter-data-jpa启动器依赖就能使用了。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。
Starters命名:
SpringBoot官方的启动器都是以spring-boot-starter-命名的,代表了一个特定的应用类型。第三方的启动器不能以spring-boot开头命名,它们都被SpringBoot官方保留。一般一个第三方的应该这样命名,像mybatis的mybatis-spring-boot-starter。
Starters分类:
1.SpringBoot应用类启动器
2.SpringBoot生产启动器
4.其他第三方启动器

7、如何在SpringBoot启动的时候运行一些特定的代码?

如果你想在SpringBoot启动的时候运行一些特定的代码,你可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。CommandLineRunner:启动获取命令行参数

8、SpringBoot需要独立的容器运行吗?

可以不需要,内置了Tomcat/Jetty等容器

9、SpringBoot中的监视器是什么?

Springbootactuator是spring启动框架中的重要功能之一。Springboot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTPURL访问的REST端点来检查状态

10、如何使用SpringBoot实现异常处理?

Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。我们通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常

11、你如何理解SpringBoot中的Starters

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用SpringJPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了

12、springboot常用的starter有哪些

spring-boot-starter-web嵌入tomcat和web开发需要servlet与jsp支持
spring-boot-starter-data-jpa数据库支持
spring-boot-starter-data-redisredis数据库支持
spring-boot-starter-data-solrsolr支持
mybatis-spring-boot-starter第三方的mybatis集成starter

13、SpringBoot实现热部署有哪几种方式

主要有两种方式:
SpringLoaded
Spring-boot-devtools

14、如何理解SpringBoot配置加载顺序

在SpringBoot里面,可以使用以下几种方式来加载配置。
1)properties文件;
2)YAML文件;
3)系统环境变量;
4)命令行参数;
等等……

15、SpringBoot的核心配置文件有哪几个?它们的区别是什么?

SpringBoot的核心配置文件是application和bootstrap配置文件。
application配置文件这个容易理解,主要用于SpringBoot项目的自动化配置。
bootstrap配置文件有以下几个应用场景。
 使用SpringCloudConfig配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置
信息;
 一些固定的不能被覆盖的属性;
 一些加密/解密的场景

16、如何集成SpringBoot和ActiveMQ

对于集成SpringBoot和ActiveMQ,我们使用spring-boot-starter-activemq依赖关系。它只需要很少的配置,并且不需要样板代码

17、什么是JavaConfig?

SpringJavaConfig是Spring社区的产品,它提供了配置SpringIoC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于:
 面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一
个,重写它的@Bean方法等。
 2、减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和Java之间来回切换。
JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。从技术角度来讲,只使用JavaConfig配置类来
配置容器是可行的,但实际上很多人认为将JavaConfig与XML混合匹配是理想的。
 3、类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java5.0对泛型的支持,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找。

18、如何重新加载SpringBoot上的更改,而无需重新启动服务器?

这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。SpringBoot有一个开发工具
(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载SpringBoot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。SpringBoot在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

19、SpringBoot中的监视器是什么?

Springbootactuator是spring启动框架中的重要功能之一。Springboot监视器可帮助您访问生产环境中正在运行的应用程序的当前状
态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTPURL访问的REST端点来检查状态。

20、如何在SpringBoot中禁用Actuator端点安全性?

默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

21、如何在自定义端口上运行SpringBoot应用程序?

为了在自定义端口上运行SpringBoot应用程序,您可以在application.properties中指定端口。

22、什么是YAML?

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。

23、如何实现SpringBoot应用程序的安全性?

为了实现SpringBoot的安全性,我们使用spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类
将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

24、如何集成SpringBoot和ActiveMQ?

对于集成SpringBoot和ActiveMQ,我们使用依赖关系。它只需要很少的配置,并且不需要样板代码。

25、如何使用SpringBoot实现分页和排序?

使用SpringBoot实现分页非常简单。使用SpringData-JPA可以实现将可分页的传递给存储库方法。

26、什么是Swagger?你用SpringBoot实现了它吗?

Swagger广泛用于可视化API,使用SwaggerUI为前端开发人员提供在线沙箱。Swagger是用于生成RESTfulWeb服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过Swagger正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

27、什么是SpringProfiles?

SpringProfiles允许用户根据配置文件(dev,test,prod等)来注册bean。因此,当应用程序在开发中运行时,只有某些bean可以加载,而在PRODUCTION中,某些其他bean可以加载。假设我们的要求是Swagger文档仅适用于QA环境,并且禁用所有其他文档。这可以使用配置文件来完成。SpringBoot使得使用配置文件非常简单。

28、什么是SpringBatch?

SpringBootBatch提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。

29、什么是FreeMarker模板?

FreeMarker是一个基于Java的模板引擎,最初专注于使用MVC软件架构进行动态网页生成。使用Freemarker的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理html页面设计。最后使用freemarker可以将这些结合起来,给出最终的输出页面。

30、如何使用SpringBoot实现异常处理?

Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。我们通过实现一个ControlerAdvice类,来处理控制器类抛出的所
有异常。

31、您使用了哪些startermaven依赖项?

使用了下面的一些依赖项
spring-boot-starter-activemq
spring-boot-starter-security
这有助于增加更少的依赖关系,并减少版本的冲突。

32、什么是CSRF攻击?

CSRF代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。这有助于增加更少的依赖关系,并减少版本的冲突。

33、什么是WebSockets?

WebSocket是一种计算机通信协议,通过单个TCP连接提供全双工通信信道。
 WebSocket是双向的-使用WebSocket客户端或服务器可以发起消息发送。
 WebSocket是全双工的-客户端和服务器通信是相互独立的。
 单个TCP连接-初始连接使用HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信
 Light-与http相比,WebSocket消息数据交换要轻得多。

34、什么是AOP?

在软件开发过程中,跨越应用程序多个点的功能称为交叉问题。这些交叉问题与应用程序的主要业务逻辑不同。因此,将这些横切关注与业务逻辑分开是面向方面编程(AOP)的地方。

35、什么是ApacheKafka?

ApacheKafka是一个分布式发布-订阅消息系统。它是一个可扩展的,容错的发布-订阅消息系统,它使我们能够构建分布式应用程序。
这是一个Apache顶级项目。Kafka适合离线和在线消息消费。
36、我们如何监视所有SpringBoot微服务?
SpringBoot提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及50个应用程序的微服务,管理员将不得不击中所有50个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。它建立在SpringBootActuator之上,它提供了一个WebUI,使我们能够可视化多个应用程序的度量。

37、SpringBoot的配置文件有哪几种格式?它们有什么区别?

.properties和.yml,它们的区别主要是书写格式不同。

  • properties
  • yml 另外,.yml格式不支持@PropertySource注解导入配置。

38、开启SpringBoot特性有哪几种方式?

  • 继承spring-boot-starter-parent项目
  • 导入spring-boot-dependencies项目依赖

39、SpringBoot的目录结构是怎样的?

这个目录结构是主流及推荐的做法,而在主入口类上加上@SpringBootApplication注解来开启SpringBoot的各项能力,如自动配置、组件扫描等。

40、运行SpringBoot有哪几种方式?

  • 打包用命令或者放到容器中运行
  • 用Maven/Gradle插件运行
  • 直接执行main方法运行

41、SpringBoot自动配置原理是什么?

注解@EnableAutoConfiguration,@Configuration,@ConditionalOnClass就是自动配置的核心,首先它得是一个配置文件,其次根据类
路径下是否有这个类去自动配置。

42、如何在SpringBoot启动的时候运行一些特定的代码?

可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法

43、SpringBoot有哪几种读取配置的方式?

SpringBoot可以通过@PropertySource,@Value,@Environment,@ConfigurationProperties来绑定变量

44、SpringBoot支持哪些日志框架?推荐和默认的日志框架是哪个?

SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用Starters启动器,SpringBoot将使用Logback作为默认日志框架

45、SpringBoot如何定义多套不同环境配置?

提供多套配置文件,如:运行时指定具体的配置文件

46、SpringBoot可以兼容老Spring项目吗,如何做?

可以兼容,使用@ImportResource注解导入老Spring项目配置文件。

47、保护SpringBoot应用有哪些方法?

在生产中使用HTTPS
使用Snyk检查你的依赖关系
升级到最新版本
启用CSRF保护
使用内容安全策略防止XSS攻击

49、如何重新加载SpringBoot上的更改,而无需重新启动服务器?

这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。SpringBoot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。
开发人员可以重新加载SpringBoot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。SpringBoot在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

50、springboot集成mybatis的过程

  • 添加mybatis的startermaven依赖
  • org.mybatis.spring.boot
  • mybatis-spring-boot-starter1.2.0
  • 在mybatis的接口中添加@Mapper注解
  • 在application.yml配置数据源信息

51、SpringBoot、SpringMVC和Spring有什么区别?

SpringFrame
SpringFramework最重要的特征是依赖注入。所有SpringModules不是依赖注入就是IOC控制反转。
当我们恰当的使用DI或者是IOC的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
SpringMVC
SpringMVC提供了一种分离式的方法来开发Web应用。通过运用像DispatcherServelet,MoudlAndView和ViewResolver等一些简单的
概念,开发Web应用将会变的非常简单。
SpringBoot
Spring和SpringMVC的问题在于需要配置大量的参数。
SpringBoot通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,SpringBoot提供了一些非功能性特征。

52、什么是SpringBootStater?

启动器是一套方便的依赖没描述符,它可以放在自己的程序中。你可以一站式的获取你所需要的Spring和相关技术,而不需要依赖描
述符的通过示例代码搜索和复制黏贴的负载。

例如,如果你想使用Sping和JPA访问数据库,只需要你的项目包含spring-boot-starter-data-jpa依赖项,你就可以完美进行。
问题四你能否举一个例子来解释更多Staters的内容?
让我们来思考一个Stater的例子-SpringBootStaterWeb。
如果你想开发一个web应用程序或者是公开REST服务的应用程序。SpringBootStartWeb是首选。让我们使用SpringInitializr创建一
个SpringBootStartWeb的快速项目。
SpringBootStartWeb的依赖项

><bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix">
<value>/WEB-INF/views/</value>
</property>
<propertyname="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resourcesmapping="/webjars/**"location="/webjars/"/>

53、SpringBoot还提供了其它的哪些StarterProjectOptions?

SpringBoot也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。
spring-boot-starter-web-services-SOAPWebServices
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的SpringDataJPA
spring-boot-starter-data-rest-使用SpringDataREST公布简单的REST服务

54、Spring是如何快速创建产品就绪应用程序的?

SpringBoot致力于快速产品就绪应用程序。为此,它提供了一些譬如高速缓存,日志记录,监控和嵌入式服务器等开箱即用的非功能性特征。
spring-boot-starter-actuator-使用一些如监控和跟踪应用的高级功能
spring-boot-starter-undertow,spring-boot-starter-jetty,spring-boot-starter-tomcat-选择您的特定嵌入式Servlet容器

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring-core,beans,context,aop
WebMVC-(SpringMVC)
Jackson-forJSONBinding
Validation-Hibernate,ValidationAPI
EnbeddedServletContainer-Tomcat
Logging-logback,slf4j

spring-boot-starter-logging-使用logback进行日志记录
spring-boot-starter-cache-启用SpringFramework的缓存支持
###Spring2和Spring5所需要的最低Java版本是什么?
SpringBoot2.0需要Java8或者更新的版本。Java6和Java7已经不再支持。
推荐阅读:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes

55、创建一个SpringBootProject的最简单的方法是什么?

SpringInitializr是启动SpringBootProjects的一个很好的工具。
就像上图中所展示的一样,我们需要做一下几步:
登录SpringInitializr,按照以下方式进行选择:
选择com.in28minutes.springboot为组
选择studet-services为组件
选择下面的依赖项
Web
Actuator
DevTools
点击生GenerateProject
将项目导入Eclipse。文件-导入-现有的Maven项目

56、SpringInitializr是创建SpringBootProjects的唯一方法吗?

不是的。
SpringInitiatlizr让创建SpringBoot项目变的很容易,但是,你也可以通过设置一个maven项目并添加正确的依赖项来开始一个项目。
在我们的Spring课程中,我们使用两种方法来创建项目。
第一种方法是start.spring.io。
另外一种方法是在项目的标题为“BasicWebApplication”处进行手动设置。
手动设置一个maven项目
这里有几个重要的步骤:
在Eclipse中,使用文件-新建Maven项目来创建一个新项目
添加依赖项。
添加maven插件。
添加SpringBoot应用程序类。
到这里,准备工作已经做好!

57、如何使用SpringBoot自动重装我的应用程序?

使用SpringBoot开发工具。
把SpringBoot开发工具添加进入你的项目是简单的。
把下面的依赖项添加至你的SpringBootProjectpom.xml中

重启应用程序,然后就可以了。
同样的,如果你想自动装载页面,有可以看看FiveReload
http://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-live-reload/.

58、什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?

思考一下在你的虚拟机上部署应用程序需要些什么。
第一步:安装Java
第二部:安装Web或者是应用程序的服务器(Tomat/Wbesphere/Weblogic等等)
第三部:部署应用程序war包
如果我们想简化这些步骤,应该如何做呢?
让我们来思考如何使服务器成为应用程序的一部分?
你只需要一个安装了Java的虚拟机,就可以直接在上面部署应用程序了,
是不是很爽?
这个想法是嵌入式服务器的起源。
当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。
例如,对于一个SpringBoot应用程序来说,你可以生成一个包含EmbeddedTomcat的应用程序jar。你就可以想运行正常Java应
用程序一样来运行web应用程序了。
嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。

59、如何在SpringBoot中添加通用的JS代码?

在源文件夹下,创建一个名为static的文件夹。然后,你可以把你的静态的内容放在这里面。
例如,myapp.js的路径是resources\static\js\myapp.js
你可以参考它在jsp中的使用方法
错误:HALbrowsergivesmeunauthorizederror-Fullauthenticaitionisrequiredtoaccessthisresource.
该如何来修复这个错误呢?
两种方法:
方法1:关闭安全验证
application.properties
方法二:在日志中搜索密码并传递至请求标头中

60、什么是SpringDate?

来自://projects.spring.io/spring-data/
SpringData的使命是在保证底层数据存储特殊性的前提下,为数据访问提供一个熟悉的,一致性的,基于Spring的编程模型。这使
得使用数据访问技术,关系数据库和非关系数据库,map-reduce框架以及基于云的数据服务变得很容易。
为了让它更简单一些,SpringData提供了不受底层数据源限制的Abstractions接口。

61、什么是SpringDataREST?

SpringDataTEST可以用来发布关于Spring数据库的HATEOASRESTful资源。
下面是一个使用JPA的例子
不需要写太多代码,我们可以发布关于Spring数据库的RESTfulAPI。
下面展示的是一些关于TEST服务器的例子
POST
URL:http://localhost:8080/todos
UseHeader:Content-Type:Type:application/json
RequestContent
响应内容
响应包含新创建资源的href。

62、path=”users”,collectionResourceRel=”users”如何与SpringDataRest一起使用?

path-这个资源要导出的路径段。
collectionResourceRel-生成指向集合资源的链接时使用的rel值。在生成HATEOAS链接时使用。

63、当SpringBoot应用程序作为Java应用程序运行时,后台会发生什么?

如果你使用EclipseIDE,Eclipsemaven插件确保依赖项或者类文件的改变一经添加,就会被编译并在目标文件中准备好!在这之后,就和其它的Java应用程序一样了。
当你启动java应用程序的时候,springboot自动配置文件就会魔法般的启用了。
当SpringBoot应用程序检测到你正在开发一个web应用程序的时候,它就会启动tomcat。

64、我们能否在spring-boot-starter-web中用jetty代替tomcat?

在spring-boot-starter-web移除现有的依赖项,并把下面这些添加进去。

@RepositoryRestResource(collectionResourceRel="todos",path="todos")
publicinterfaceTodoRepository
extendsPagingAndSortingRepository<Todo,Long>{
{
"user":"Jill",
"desc":"LearnHibernate",
"done":false
}
{
"user":"Jill",
"desc":"LearnHibernate",
"done":false,
"_links":{
"self":{
"href":"http://localhost:8080/todos/1"
},
"todo":{
"href":"http://localhost:8080/todos/1"
}
}
}
@RepositoryRestResource(collectionResourceRel="users",path="users")
publicinterfaceUserRestRepositoryextends
PagingAndSortingRepository<User,Long>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>

65、如何使用SpringBoot生成一个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

66、如何使用SpringBoot部署到不同的服务器?

你需要做下面两个步骤:
在一个项目中生成一个war文件。
将它部署到你最喜欢的服务器(websphere或______________者Weblogic或者Tomcatandsoon)。
第一步:这本入门指南应该有所帮助:
https://spring.io/guides/gs/convert-jar-to-war/
第二步:取决于你的服务器。

67、RequestMapping和GetMapping的不同之处在哪里?

RequestMapping具有类属性的,可以进行GET,POST,PUT或者其它的注释中具有的请求方法。
GetMapping是GET请求方法中的一个特例。它只是ResquestMapping的一个延伸,目的是为了提高清晰度。

68、为什么我们不建议在实际的应用程序中使用SpringDataRest?

我们认为SpringDataRest很适合快速原型制造!在大型应用程序中使用需要谨慎。通过SpringDataREST你可以把你的数据实体作为RESTful服务直接发布。当你设计RESTful服务器的时候,最佳实践表明,你的接口应该考虑到两件重要的事情:你的模型范围。你的客户。
通过WithSpringDataREST,你不需要再考虑这两个方面,只需要作为TEST服务发布实体。
这就是为什么我们建议使用SpringDataRest在快速原型构造上面,或者作为项目的初始解决方法。对于完整演变项目来说,这并不是一个好的注意。

69、在SpringInitializer中,如何改变一个项目的包名字?

好消息是你可以定制它。点击链接“转到完整版本”。你可以配置你想要修改的包名称!

70、可以配置application.propertierde的完整的属性列表在哪里可以找到?这里是完整的指南:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

71、JPA和Hibernate有哪些区别?

简而言之
JPA是一个规范或者接口,Hibernate是JPA的一个实现当我们使用JPA的时候,我们使用javax.persistence包中的注释和接口时,不需要使用hibernate的导入包。
我们建议使用JPA注释,因为我们没有将其绑定到Hibernate作为实现。后来(我知道-小于百分之一的几率),我们可以使用另一种JPA实现。

72、使用SpringBoot启动连接到内存数据库H2的JPA应用程序需要哪些依赖项?

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

在SpringBoot项目中,当你确保下面的依赖项都在类路里面的时候,你可以加载H2控制台。web启动器h2,jpa数据启动器其它的依赖项在下面:
需要注意的一些地方:
一个内部数据内存只在应用程序执行期间存在。这是学习框架的有效方式。这不是你希望的真是世界应用程序的方式。

73、如何不通过任何配置来选择Hibernate作为JPA的默认实现?

因为SpringBoot是自动配置的。
下面是我们添加的依赖项
spring-boot-stater-data-jpa对于Hibernate和JPA有过渡依赖性。
当SpringBoot在类路径中检测到Hibernate中,将会自动配置它为默认的JPA实现。

74、指定的数据库连接信息在哪里?它是如何知道自动连接至H2的?

这就是SpringBoot自动配置的魔力。
来自:
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html
SpringBootauto-configuration试图自动配置你已经添加的基于jar依赖项的Spring应用程序。比如说,如果HSQLDBis存在你的类路径
中,并且,数据库连接bean还没有手动配置,那么我们可以自动配置一个内存数据库。进一步的阅读:
http://www.springboottutorial.com/spring-boot-auto-configuration

75、我们如何连接一个像MSSQL或者orcale一样的外部数据库?

让我们以MySQL为例来思考这个问题:
第一步-把mysql连接器的依赖项添加至pom.xml
第二步-从pom.xml中移除H2的依赖项
或者至少把它作为测试的范围。

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
-->

第三步-安装你的MySQL数据库
更多的来看看这里-https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql
第四步-配置你的MySQL数据库连接
配置application.properties
第五步-重新启动,你就准备好了!
就是这么简单!

76、SpringBoot配置的默认H2数据库的名字是上面?为什么默认的数据库名字是 testdb?

在application.properties里面,列出了所有的默认值
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html找到下面的属性,如果你使用了H2内部存储数据库,它里面确定了SpringBoot用来安装你的H2数据库的名字。

77、如果H2不在类路径里面,会出现上面情况?

将会报下面的错误,把H2添加至pom.xml中,然后重启你的服务器

78、你能否举一个以ReadOnly为事务管理的例子?

当你从数据库读取内容的时候,你想把事物中的用户描述或者是其它描述设置为只读模式,以便于Hebernate不需要再次检查实体的变
化。这是非常高效的。

79、发布SpringBoot用户应用程序自定义配置的最好方法是什么?

@Value的问题在于,您可以通过应用程序分配你配置值。更好的操作是采取集中的方法。你可以使用@ConfigurationProperties定义一个配置组件。
你可以在application.properties中配置参数。

80、配置文件的需求是什么?

企业应用程序的开发是复杂的,你需要混合的环境:

Dev,QA
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/todo_example
spring.datasource.username=todouser
spring.datasource.password=YOUR_PASSWORD
spring.datasource.name=testdb#Nameofthedatasource.
CannotdetermineembeddeddatabasedriverclassfordatabasetypeNONE
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
@Component
@ConfigurationProperties("basic")
publicclassBasicConfiguration{
privatebooleanvalue;
privateStringmessage;
privateintnumber;
basic.value:true
basic.message:DynamicMessage
basic.number:100

Stage
Production
在每个环境中,你想要不同的应用程序配置。
配置文件有助于在不同的环境中进行不同的应用程序配置。
Spring和SpringBoot提供了你可以制定的功能。
不同配置文件中,不同环境的配置是什么?
为一个制定的环境设置活动的配置文件。
SpringBoot将会根据特定环境中设置的活动配置文件来选择应用程序的配置。

81、如何使用配置文件通过SpringBoot配置特定环境的配置?

配置文件不是设别环境的关键。
在下面的例子中,我们将会用到两个配置文件
dev
prod
缺省的应用程序配置在application.properties中。让我们来看下面的例子:
application.properties
我们想要为dev文件自定义application.properties属性。我们需要创建一个名为application-dev.properties的文件,并且重写我们想要
自定义的属性。
application-dev.properties
一旦你特定配置了配置文件,你需要在环境中设定一个活动的配置文件。
有多种方法可以做到这一点:
在VM参数中使用Dspring.profiles.active=prod
在application.properties中使用spring.profiles.active=prod
文章来源:http://www.3xmq.com/article/1522809264295

82、我们如何使用Maven设置SpringBoot应用程序?

我们可以像在任何其他库中一样在Maven项目中包含SpringBoot。但是,最好的方法是从spring-boot-starter-parent项目继承并声明
依赖于SpringBoot启动器。这样做可以让我们的项目重用SpringBoot的默认设置。继承spring-boot-starter-parent项目非常简单-我们只需要在pom.xml中指定一个parent元素:
我们可以在Maven中央仓库找到最新版本的spring-boot-starter-parent。上面的方式很方便但是并不一定符合实际需要。例如公司要求所有项目依赖构建从一个标准BOM开始,我们就不能按上面的方式进行。在这种情况下,我们可以进行如下引用:
basic.value=true
basic.message=DynamicMessage
basic.number=100
basic.message:DynamicMessageinDEV

83、如何禁用特定的自动配置?

如果我们要禁用特定的自动配置,我们可以使用@EnableAutoConfiguration注解的exclude属性来指示它。如下禁用了数据源自动配置
DataSourceAutoConfiguration:
如果我们使用@SpringBootApplication注解。它具有@EnableAutoConfiguration作为元注解-我们同样可以配置exclude属性来禁用
自动配置:
我们还可以使用spring.autoconfigure.exclude环境属性禁用自动配置。在application.properties(也可以是application.yml)配
置文件设置如下也可以达到同样的目的:

84、Springboot支持哪些外部配置?

SpringBoot支持外部配置,允许我们在各种环境中运行相同的应用程序。我们可以使用properties文件,YAML文件,环境变量,系统属性和命令行选项参数来指定配置属性。然后,我们可以访问使用这些属性@Value注释,经由绑定对象的@ConfigurationProperties注释或Environment环境抽象类注入。以下是最常见的外部配置来源:

  • 命令行属性:命令行选项参数是以双连字符开头的程序参数,例如-server.port=8080。SpringBoot将所有参数转换为属性,并将它们添加到环境属性集中。
  • **应用程序属性:**应用程序属性是从application.properties文件或其YAML对应文件加载的属性。默认情况下,SpringBoot会在当
    前目录,类路径根或其config子目录中搜索此文件。特定于配置文件的属性:特定于配置文件的属性从application-{profile}
    .properties文件或其YAML对应文件加载。{profile}占位符是指活性轮廓。这些文件与非特定属性文件位于相同位置,并且优先
    于非特定属性文件。

85、如何对SpringBoot应用进行测试?

在为Spring应用程序运行集成测试时,我们必须有一个ApplicationContext。为了简化测试,SpringBoot为测试提供了一个特殊的注释
@SpringBootTest。此批注从其classes属性指示的配置类创建ApplicationContext。如果未设classes属性,SpringBoot将搜索主配置类。搜索从包含测试的包开始,直到找到使用@SpringBootApplication或@SpringBootConfiguration注释的类。请注意,如果我们使用JUnit4,我们必须用@RunWith(SpringRunner.class)装饰测试类。

86、SpringBootActuator有什么用?

SpringBootActuator可以帮助你监控和管理SpringBoot应用,比如健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTPendpoints来获得。Actuator同时还可以与外部应用监控系统整合,比如Prometheus,Graphite,DataDog,Influx,Wavefront,NewRelic等。这些系统提供了非常好的仪表盘、图标、分析和告警等功能,使得你可以通过统一的接口轻松的监控和管理你的应用。Actuator使用Micrometer来整合上面提到的外部应用监控系统。这使得只要通过非常小的配置就可以集成任何应用监控系统。
将SpringBootActuator集成到一个项目中非常简单。我们需要做的就是在pom.xml文件中包含spring-boot-starter-actuator启动器:
![在这里插入图片描述](https://img-blog.csdnimg.cn/9b6fca9227a44cc393d3b1653154b62e.png
SpringBootActuator可以使用HTTP或JMX端点公开操作信息。但是,大多数应用程序都使用HTTP,其中端点的标识和/执行器前缀形成URL路径。以下是Actuator提供的一些最常见的内置端点:
auditevents:公开审计事件信息
env:公开环境属性
health:显示应用程序运行状况信息
httptrace:显示HTTP跟踪信息
info:显示任意应用程序信息
metrics:显示指标信息
mappings:显示所有@RequestMapping路径的列表
scheduledtasks:显示应用程序中的计划任务
threaddump:执行线程转储
`beans:所有加载的springbean
更多关于SpringBootActuator的信息可查看SpringBoot2.x中的Actuator。请注意:生产使用Actuator务必保护好这些端点,避免
未授权的访问请求。

87、SpringBoot中静态首页默认位置可以放在哪里?

当我们应用根目录时,可以直接映射,将index.html放入下面的位置:

classpath:/META-INF/resources/index.html
classpath:/resources/index.html
classpath:/static/index.html
classpath:/public/index.html

89、SpringBoot中静态资源直接映射的优先级是怎样的?

SpringBoot静态资源直接映射为/**,可以通过根目录来访问。/META-INF/resources/webjars/映射为/webjars/,通过访问/webjar访
问。优先级顺序为:META-INF/resources>resources>static>public。

90、继承WebMvcConfigurerAdapter抽象类,常用的重写方法列举几个?

WebMvcConfigurerAdapter实现WebMvcConfigurer接口,常用的可能需要重写的方法有下面几个:

/**解决跨域问题**/
publicvoidaddCorsMappings(CorsRegistryregistry);
/**添加拦截器**/
voidaddInterceptors(InterceptorRegistryregistry);
/**这里配置视图解析器**/
voidconfigureViewResolvers(ViewResolverRegistryregistry);
/**配置内容裁决的一些选项**/
voidconfigureContentNegotiation(ContentNegotiationConfigurerconfigurer);
/**视图跳转控制器**/
voidaddViewControllers(ViewControllerRegistryregistry);
/**静态资源处理**/
voidaddResourceHandlers(ResourceHandlerRegistryregistry);
/**默认静态资源处理器**/
voidconfigureDefaultServletHandling(DefaultServletHandlerConfigurerconfigurer);

91、@SpringBootApplication引入了哪3个重要的注解?

@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。其它的4个@Target、@Retention、@Documented、
@Inherited,也重要,但应该不是本题想问的知识点。

92、@SpringBootApplication注解中的属性相当于哪几个注解?

等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值