Springboot相关面试问题
1.什么是springboot?
多年来,随着新功能的增加,spring 变得越来越复杂。访问spring官网页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。
Spring Boot 是解决这个问题的方法。Spring Boot 已经建立在现有 spring 框架之上。使用 spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring功能。
简单来说,Springboot就是用来简化spring应用的初始搭建及开发过程,使用特定的方式来进行配置(properties或yml文件),使用约定大于配置的原则,去繁从简,通过嵌入Tomcat,无需部署war包,直接运行一个main方法就能创建一个独立的,产品级别的应用.
2.Springboot有哪些优点?
1)快速创建独立运行的spring项目与主流框架集成 ,减少开发前期的准备工作
2)大量的自动配置,简化开发,避免大量的 Maven 导入和各种版本冲突,也可修改默认值
3)使用嵌入式的servlet容器,应用无需打包成war包,不再需要自己去启动 Tomcat
4)使用properties或yml文件,配置简单清晰
3.如何重新加载Spring Boot上修改的文件,而无需重新启动服务器?
这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。
Dev工具的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
4.Springboot中的监视器是什么?
SpringBoot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。
5.如何在Springboot中禁用监视器(Actuator)端点安全性?
默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
6.如何使用Springboot实现分页和排序?
使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。
7.如何使用Springboot实现异常处理?
Spring 提供了一种使用 @ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个使用@ ControlerAdvice 注解的类,来处理控制器类抛出的所有异常。
8.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
9.什么是Springboot starter,说说你对它的理解?
启动器是一套方便的依赖类描述符,你可以一站式的获取你所需要的 Spring 和相关框架依赖,不需要再担心这些依赖项和它们的兼容版本.
使用Spring Boot Stater Web的例子:
我们在项目中添加Spring Boot Start Web 的依赖项
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
然后通过这个启动项,springboot就会默认的给我们添加如下依赖:
Spring - core,Spring - beans,Spring - context,Spring - 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 预先打包了这些依赖项。
10.Springboot读取配置文件的方式?
springboot默认读取配置文件为application.properties或者是application.yml;如果两个文件都有,以application.properties为主;
11.Springboot集成mybatis的方式?
1)添加mybatis的starter maven依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter </artifactId> <version>1.2.0</version>
2)在mybatis的接口中 添加@Mapper注解
3)在application.yml/application.properties配置数据源信息
12.常见的starter会包含哪几个方面的内容?分别是什么?
常见的starter会包含如下四个方面的内容:
1)自动配置文件: 根据classpath判断是否存在指定的类来决定是否要执行该功能的自动配置。
2)spring.factories: 非常重要,指导Spring Boot找到指定的自动配置文件。
3)endpoint: 可以理解为一个admin,包含对服务的描述、界面、交互(业务信息的查询)。
4)health indicator: 该starter提供的服务的健康指标。
两个需要注意的点:
1)@ConditionalOnMissingBean的作用是:只有对应的bean在系统中都没有被创建,它修饰的初始化代码块才会执行,【用户自己手动创建的bean优先】.
2)Spring Boot Starter找到自动配置文件(xxxxAutoConfiguration之类的文件)的方式有两种:
spring.factories:由Spring Boot触发探测classpath目录下的类,进行自动配置.
@EnableXxxxx:有时需要由starter的用户触发*查找自动配置文件的过程
13.Springboot Starter的工作原理?
Spring Boot Starter的工作原理如下:
1. Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR.
2. 根据spring.factories配置加载AutoConfigure类
3. 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context
14.自定义springboot-starter时的注意事项?
1.springboot默认scan的包名是其main类所在的包名。如果引入的starter包名不一样,需要自己添加scan。@ComponentScan(basePackages = {"com.xixicat.demo","com.xixicat.sms"}
2.对于starter中有feign的,需要额外指定 @EnableFeignClients(basePackages = {"com.xixicat.sms"})
3.对于exclude一些autoConfig @EnableAutoConfiguration(exclude ={MetricFilterAutoConfiguration.class})
15.Springboot相较于SpringFramework和SpringMVC有什么优势?
SpringFramework最重要的特征就是依赖注入,方便开发松耦合的应用,SpringMVC提供了一种分离式的方法来开发Web应用,使开发web应用很简单.但是,SpringFramework和SpringMVC的问题在于都需要配置大量参数,Springboot则是通过一个自动配置和启动的项来解决这些问题,为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。
16.什么是Springboot的自动配置?
自动配置一些beans,通过SpringFramework查看(classPath上可用的框架)已存在的应用程序的配置,在此基础上,Springboot提供了配置应用程序和框架所需要的基本配置,这就是自动配置.
17.Springboot自动配置的原理?
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration 会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean.
18.什么是嵌入式服务器?使用嵌入式服务器的优点?
当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的应用程序中。
例如,对于一个 Spring Boot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应用程序 jar。你就可以想运行正常Java 应用程序一样来运行 web 应用程序了。
嵌入式服务器就是我们的可执行单元,包含服务器的二进制文件(例如,tomcat.jar)。
19.当Springboot应用程序作为Java应用程序运行时,后台会发生什么?
当启动Java应用程序时,Springboot自动配置文件就会启用.
当Springboot应用程序检测到你正在开发一个web应用程序的时候,它就会启动Tomcat.
20.如何在spring-boot-starter-web中使用Jetty替代默认的Tomcat?
在spring-boot-starter-web 移除现有的依赖项,并把下面这些添加进去。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <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>
21.如何把Springboot项目打成war包发布?
1)将pom.xml中的首部的jar改成war
<groupId>com.star</groupId> <artifactId>yiyong</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <!--<packaging>jar</packaging>-->
2)将spring-boot-starter-web依赖中移除tomcat模块,在外部新配置Tomcat依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
3)修改启动类,使其继承SpringBootServletInitializer类,重写configure()方法:
@SpringBootApplication public class YiyongApplication extends SpringBootServletInitializer{ @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(YiyongApplication.class); } public static void main(String[] args) { SpringApplication.run(YiyongApplication.class, args); } }
4)打包部署,在idea右侧maven栏进行clean和package部署;
5)最后把target目录下的war包放到自己喜欢的服务器(websphere 或者 Weblogic 或者 Tomcat and so on),即可自动解压部署
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库