博客
关于我
面试官分享在java面试中常问的spring boot相关的问题
阅读量:417 次
发布时间:2019-03-06

本文共 4752 字,大约阅读时间需要 15 分钟。

Spring Boot技术问答解析

随着信息技术的飞速发展,Spring Boot作为一款灵活高效的全栈框架,正在越来越多地被开发者青睐。作为一名技术面试者,掌握Spring Boot的核心知识无疑是至关重要的。本文将从多个维度解析Spring Boot的核心概念,帮助你在面试中游刃有余。


1. Spring和Spring Boot的区别

Spring Framework是全功能性的Java应用开发框架,提供了丰富的功能模块,如依赖注入、数据绑定、面向方面编程、数据访问等。然而,随着社区的扩大,Spring逐渐变得复杂,配置管理也变得繁琐。这个时候,Spring Boot就应运而生。Spring Boot采用“约定大于配置”的理念,简化了Spring的默认配置,并将一些功能抽象为“Starter”模块,实现了“开箱即用、按需引用”的理念。通过这种方式,Spring Boot大大降低了开发门槛。


2. 使用Maven设置Spring Boot应用程序

在Maven项目中集成Spring Boot应用程序,可以通过以下两种方式实现:

  • 方式一:继承Spring Boot父项目

    这是最简单的方法。在项目的pom.xml中添加如下配置:

    org.springframework.boot
    spring-boot-starter-parent
    3.1.5

    这样可以重用Spring Boot的默认配置。然而,如果需要根据公司内部要求从特定BOM版本开始依赖,可以采用以下方式:

  • 方式二:手动引用Spring Boot starters

    dependencies标签下,手动添加所需的Spring Boot starters。例如:

    org.springframework.boot
    spring-boot-starter-web
    3.1.5

    这种方式适用于需要高度定制配置的场景。


3. Spring Boot中的Starter模块

Spring Boot的Starter模块是一种依赖管理的最佳实践。当项目复杂度增加时,手动管理依赖关系会变得异常痛苦。Spring Boot的Starter模块通过提供一站式服务,解决了这一问题。每个Starter模块都遵循spring-boot-starter-*命名规则,例如:

  • spring-boot-starter:核心启动模块,支持自动配置、日志记录和YAML文件解析。
  • spring-boot-starter-aop:用于实现面向方面编程。
  • spring-boot-starter-data-jpa:集成Spring Data JPA和Hibernate。

目前官方提供了超过50个Starter模块,常用模块包括:

  • Web应用开发:spring-boot-starter-web
  • 数据访问:spring-boot-starter-data-jpa
  • 安全管理:spring-boot-starter-security
  • 测试助手:spring-boot-starter-test

更多Starter模块可以从spring.io官方网站查询。


4. 禁用特定自动配置

在Spring Boot应用中,默认会自动配置大量的模块。如果需要禁用某些自动配置,可以通过以下方式实现:

  • 方式一:使用@EnableAutoConfiguration注解

    在主类上使用@EnableAutoConfiguration注解,并设置exclude属性,指定需要禁用的自动配置类。例如:

    @SpringBootApplication@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})public class MainApplication {  public static void main(String[] args) {    SpringApplication.run(MainApplication.class, args);  }}
  • 方式二:通过环境属性禁用自动配置

    application.properties中设置spring.autoconfigure.exclude属性。例如:

    spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.EnableAutoConfiguration

5. 注册自定义自动配置

如果需要注册自定义的自动配置类,可以按照以下步骤操作:

  • META-INF/spring.factories文件中,将自定义配置类添加到spring.autoconfigure.includeFilters属性中。例如:

    spring.autoconfigure.includeFilters= \  org.springframework.boot.autoconfigure.filter.TypeExcludeFilter,  com.example.MyAutoConfigurationFilter
  • 将该文件放置在项目的resources/META-INF目录中。


  • 6. 根据条件加载Bean

    在Spring Boot中,根据条件加载Bean可以通过@Conditional注解实现。常用的注解包括:

    • @ConditionalOnMissingBean:确保某个类型的Bean不存在时,才进行初始化。
    • @ConditionalOnProperty:根据环境属性条件加载Bean。

    例如:

    import org.springframework.beans.factory.annotation.ConditionalOnMissingBean;public class MyBean {    @ConditionalOnMissingBean    public MyService myService() {        return new MyServiceImpl();    }}

    7. 部署Spring Boot Web应用程序

    随着技术进步,部署Spring Boot应用程序的方式也在发生改变。以下是两种常见的部署方式:

    • WAR文件部署

      将Web应用打包为WAR文件后,部署到外部服务器中。这种方式适合多个应用共享同一台服务器资源。

    • JAR文件部署

      Spring Boot提供了spring-boot-maven-plugin插件,允许将Web应用打包为可执行的JAR文件。这种方式无需配置外部服务器,直接运行JAR文件即可启动应用。


    8. 在Spring Boot启动时执行逻辑

    如果需要在Spring Boot启动时执行某些初始化逻辑,可以实现ApplicationRunnerCommandLineRunner接口。两个接口的实现方式相同,仅提供一个run方法。例如:

    import org.springframework.boot.ApplicationRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class MainApplication implements ApplicationRunner {    @Override    public void run(SpringApplication app, String[] args) {        System.out.println("Application is running...");    }    public static void main(String[] args) {        SpringApplication.run(MainApplication.class, args);    }}

    9. Spring Boot支持的外部配置方式

    Spring Boot允许通过多种方式加载外部配置,包括:

    • 命令行参数:通过--符号开头的参数,例如--server.port=8080
    • 应用程序属性文件:从application.propertiesapplication.yml文件中加载属性。
    • 特定配置文件:通过application-{profile}.propertiesapplication.yml文件加载环境相关属性。
    • 系统属性和环境变量:通过System.getProperty()Environment.getenv()方法获取。

    这些配置可以通过@Value注解、@ConfigurationProperties注解或Environment抽象类进行注入。


    10. 编写集成测试

    在Spring Boot项目中,编写集成测试可以通过@SpringBootTest注解实现。该注解会创建一个ApplicationContext,并从测试类所在包开始搜索主配置类。例如:

    import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.beans.factory.annotation.Autowired;@SpringBootTestpublic class MyTest {    @Autowired    private ApplicationContext context;    @Test    void testHello() {        System.out.println(context.getBeans().size());    }}

    如果使用JUnit 4,需要在测试类上使用@RunWith(SpringRunner.class)注解。


    11. Spring Boot Actuator的功能

    Spring Boot Actuator是一个强大且灵活的应用监控工具,提供了丰富的内置端点,支持健康检查、审计、统计和HTTP追踪等功能。通过集成Actuator,可以轻松将应用与外部监控系统(如Prometheus、Graphite等)结合,实现应用的全面监控。

    Actuator的核心功能包括:

    • 健康检查:通过/health端点获取应用状态。
    • 审计日志:记录应用的审计事件。
    • 缓存信息:显示可用缓存状态。
    • 自动装配信息:提供自动装配类的状态和应用信息。

    值得注意的是,Actuator的相关端点对安全性要求较高,生产环境中必须进行合理的权限管理。


    结论

    今天,我们全面解析了Spring Boot在技术面试中的核心问题。这些知识点不仅有助于你在面试中脱颖而出,也将在日常开发中为你节省大量时间。记得关注“码农小胖哥”公众号,获取更多Java技术干货!

    转载地址:http://atjuz.baihongyu.com/

    你可能感兴趣的文章
    mysql 自增id和UUID做主键性能分析,及最优方案
    查看>>
    Mysql 自定义函数
    查看>>
    mysql 行转列 列转行
    查看>>
    Mysql 表分区
    查看>>
    mysql 表的操作
    查看>>
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 通过查看mysql 配置参数、状态来优化你的mysql
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>