简介本资源是面向Java后端工程师、Spring Boot初学者及准备架构师面试的技术人员的高频考点精编资料聚焦Spring Boot核心机制与实战问题覆盖基础知识、自动配置原理、Starter依赖管理、内嵌容器、Actuator监控、DevTools热部署等33个关键问题并附标准答案与深度解析。资源为单文件Word文档.docx体积轻量仅25KB便于快速查阅与离线学习内容结构清晰含14大类典型问题如YAML配置优势、ActiveMQ集成方式、JPA/Redis/MyBatis Starter使用场景、SpringBootApplication自动装配原理等。目前已有319人下载学习适合面试突击复习、技术查漏补缺或作为团队内部培训参考材料帮助读者系统掌握Spring Boot在真实项目中的设计逻辑与落地要点。1. Spring Boot 面试不考“Hello World”专挑你跳过不看的自动配置黑匣子开刀别再背“Spring Boot 是用来简化 Spring 开发的框架”这种教科书定义了——架构师面试现场这句话刚出口面试官就可能打断“那你说说SpringBootApplication里EnableAutoConfiguration到底加载了几个xxxAutoConfiguration类它们怎么被筛掉又怎么被留下的”这33题不是知识复述测试而是配置决策能力的压力面谈你是否真懂spring.factories的加载时机、ConditionalOnClass和ConditionalOnMissingBean的执行顺序、application.yml与bootstrap.yml在 Spring Cloud 场景下谁先抢到控制权。高频失分点根本不在“什么是 Starter”而在“为什么加了spring-boot-starter-data-redis却没注入RedisTemplate”——答案藏在RedisAutoConfiguration的条件判断链里而90%的候选人连这个类名都没搜过。适合谁不是刚写完 CRUD 的初级开发者而是已用 Spring Boot 搭过至少2个生产项目、但没深挖过META-INF/spring.factories加载机制、没调过ConditionEvaluationReport日志的人。这份题库直击真实架构场景微服务启动慢怎么定位是哪个 AutoConfiguration 卡住多环境配置冲突时spring.profiles.active和spring.config.import谁赢答案不在文档里在你调试--debug启动日志的第78行。2. 高频考点自动配置原理与spring.factories加载链含真题逐题拆解2.1 自动配置的三重触发机制从SpringBootApplication到xxxAutoConfiguration的完整路径面试官最常问的不是“自动配置是什么”而是“它怎么知道该配什么”。答案必须落到三个不可跳过的环节入口触发SpringBootApplication中的EnableAutoConfiguration是开关但它本身不干活只向 Spring 容器注册一个ImportSelectorAutoConfigurationImportSelector候选加载AutoConfigurationImportSelector在selectImports()方法中读取所有META-INF/spring.factories文件注意是所有 jar 包里的不只是 spring-boot-autoconfigure合并org.springframework.boot.autoconfigure.EnableAutoConfiguration键下的全限定类名列表条件过滤每个候选类如DataSourceAutoConfiguration被ConfigurationClassPostProcessor解析时会逐个执行其上的Conditional注解ConditionalOnClass、ConditionalOnMissingBean、ConditionalOnProperty等只有全部条件为 true 的类才真正被注册为Configuration类。提示面试官若追问“ConditionalOnClass(DataSource.class)是怎么判断类存在的”你要答出底层调用的是ClassUtils.isPresent()它通过ClassLoader.loadClass()尝试加载不触发类初始化——这是避免副作用的关键设计。2.2 真题14Spring Boot 自动配置的原理附标准答题模板题目原文14、springboot 自动配置的原理 在 spring 程序 main 方法中 添加SpringBootApplication 或者EnableAutoConfiguration 会自动去maven 中读取每个 starter 中的 spring.factories 文件 该文件里配置了所有需要被创建 spring 容器中的 bean标准答题结构3层递进缺一不可✅第一层触发入口EnableAutoConfiguration通过AutoConfigurationImportSelector实现它不是一个普通注解而是一个ImportSelector在 Spring 容器刷新的ConfigurationClassPostProcessor阶段被调用。✅第二层资源定位AutoConfigurationImportSelector的getCandidateConfigurations()方法会扫描所有 classpath 下的META-INF/spring.factories包括spring-boot-autoconfigure.jar、spring-boot-starter-web.jar等读取EnableAutoConfiguration键对应的全限定类名列表。注意不是“读取每个 starter 中的 spring.factories”而是读取所有 jar 包中该路径下的文件并合并。✅第三层条件裁决每个候选配置类如WebMvcAutoConfiguration都带有多个Conditional*注解。Spring Boot 使用ConditionEvaluator对每个条件求值ConditionalOnClass(DispatcherServlet.class)→ 检查DispatcherServlet是否在 classpathConditionalOnMissingBean(WebMvcConfigurationSupport.class)→ 检查容器中是否已存在该类型 Bean注意是“已存在”不是“未声明”ConditionalOnProperty(prefix spring.mvc, name hiddenmethod.filter.enabled, havingValue true)→ 检查配置项是否显式启用。只有所有条件同时满足该配置类才生效并注入 Bean。注意很多候选人答到“读取 spring.factories”就停了但面试官真正想听的是“条件怎么筛、筛错一个会怎样”。比如ConditionalOnMissingBean若漏写search SearchStrategy.CURRENT会导致子容器中已存在的 Bean 被错误覆盖——这就是架构师级失分点。2.3 真题29自动配置原理深度版与xxxProperties绑定机制题目原文29、自动配置原理 1)、SpringBoot 启动的时候加载主配置类开启了自动配置功能 EnableAutoConfiguration 2)、EnableAutoConfiguration 作用: 将类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration 的值加入到了容器中; 每一个这样的 xxxAutoConfiguration 类都是容器中的一个组件都加入到容器中;用他们来做自动配置; 3)、每一个自动配置类进行自动配置功能; 根据当前不同的条件判断决定这个配置类是否生效 4)、一但这个配置类生效;这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的 properties 类中获取 的这些类里面的每一个属性又是和配置文件绑定的; 5)、所有在配置文件中能配置的属性都是在 xxxxProperties 类中封装者‘;配置文件能配置什么就可以参照某个功 能对应的这个属性类关键补全点面试官必追问xxxProperties类如何与配置文件绑定答通过ConfigurationProperties(prefix server)注解Spring Boot 在启动时会创建ConfigurationPropertiesBindingPostProcessor它遍历所有ConfigurationProperties标注的 Bean将Environment中以server.开头的属性值按驼峰规则映射到该 Bean 的字段上如server.port8080→ServerProperties.port 8080。为什么ConfigurationProperties必须配合EnableConfigurationProperties或ConfigurationPropertiesScan才生效答因为ConfigurationPropertiesBindingPostProcessor默认只处理被Component或Bean声明的类而ConfigurationProperties本身不带Component所以需要显式启用。Value(${server.port})和ConfigurationProperties的区别答Value是单属性注入不支持松散绑定server.portvsserverPort、不支持校验Validated、不支持元数据生成IDE 无法提示ConfigurationProperties支持全部且性能更好一次解析全部属性。代码验证面试时可手写ConfigurationProperties(prefix myapp.cache) Data // Lombok public class MyCacheProperties { private int maxEntries 1000; private String type redis; DurationUnit(ChronoUnit.SECONDS) private Duration expire Duration.ofSeconds(300); }对应application.ymlmyapp: cache: max-entries: 5000 type: caffeine expire: 60s注意max-entrieskebab-case能正确绑定到maxEntriescamelCase这就是“松散绑定”expire: 60s被DurationUnit解析为Duration.ofSeconds(60)而非字符串——这些细节才是区分“用过”和“懂原理”的分水岭。2.4 真题30怎么用好自动配置实操型答题模板题目原文30、怎么用好自动配置精髓: 1)、SpringBoot 启动会加载大量的自动配置类 2)、我们看我们需要的功能有没有 SpringBoot 默认写好的自动配置类; 3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有我们就不需要再来配置了) 4)、给容器中自动配置类添加组件的时候会从 properties 类中获取某些属性。我们就可以在配置文件中指定这 些属性的值;面试官想听的实操步骤带命令列出所有生效的 AutoConfiguration启动时加--debug参数或在application.properties中加logging.level.org.springframework.boot.autoconfigureDEBUG日志中会输出CONDITIONS EVALUATION REPORT明确标出Positive matches生效和Negative matches被条件筛掉的类快速定位某功能的配置类比如要确认 Redis 相关配置直接搜索RedisAutoConfiguration它位于spring-boot-autoconfigure包中源码可见其依赖ConditionalOnClass(RedisOperations.class)和ConditionalOnMissingBean(RedisConnectionFactory.class)查看该配置类注入了哪些 Bean打开RedisAutoConfiguration发现它定义了RedisTemplate、StringRedisTemplate、RedisConnectionFactory等Bean方法定制化修改若想自定义RedisTemplate的序列化器不要重写整个RedisAutoConfiguration而是声明自己的Bean RedisTemplate利用Primary覆盖默认或在application.yml中配置spring.redis.*属性这些会自动绑定到RedisProperties进而影响RedisAutoConfiguration创建的RedisConnectionFactory。血泪经验很多候选人说“我重写了RedisAutoConfiguration”这是严重翻车——Spring Boot 设计哲学是“约定优于配置”覆盖默认行为应优先用Bean替换、Conditional控制、配置属性调整而非复制粘贴整个配置类。3. 高频考点配置文件加载顺序与 Profile 冲突解决含真题逐题拆解3.1application.ymlvsbootstrap.yml谁先加载谁管什么核心结论必须脱口而出bootstrap.yml永远先于application.yml加载且仅在 Spring Cloud 场景下有意义bootstrap.yml用于加载系统级、不可变、需在应用上下文创建前就确定的配置典型场景连接 Spring Cloud Config Serverspring.cloud.config.uri加密/解密密钥encrypt.keyspring.application.name服务名用于 Config Server 查找配置application.yml用于业务逻辑配置可被 Profile 覆盖、可动态刷新如RefreshScope。加载顺序精确到层级bootstrap.yml如果存在→ 2.bootstrap-{profile}.yml如果存在→ 3.application.yml→ 4.application-{profile}.yml→ 5.application.properties→ 6.application-{profile}.properties注意bootstrap系列文件不支持Profile注解但支持bootstrap-{profile}.yml文件名方式激活。3.2 真题18Spring Boot 的核心配置文件有哪几个它们的区别是什么题目原文18、Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。 application 配置文件这个容易了解主要用于 Spring Boot 项目的自动化配置。 bootstrap 配置文件有以下几个应用场景。 使用 Spring Cloud Config 配置中心时这时需要在 bootstrap 配置文件中增加连接到配置中心的配置属性来加载外部配置中心的配置信息 少量固定的不能被覆盖的属性 少量加密/解密的场景高分答案分场景反例✅application.*作用业务配置主体支持Profile、RefreshScope、spring.config.import典型内容server.port、spring.datasource.url、myapp.feature.enabled反例警示绝不能把spring.cloud.config.uri放在这里——因为application.yml加载时ApplicationContext已开始创建此时再去拉远程配置会失败或导致循环依赖。✅bootstrap.*作用为ApplicationContext创建提供“启动参数”在ApplicationContext初始化前就完成加载必须放这里的内容spring.cloud.config.uriConfig Server 地址spring.application.name服务名用于 Config Server 查找application-dev.ymlencrypt.key加解密密钥用于解密config-server返回的加密配置反例警示不要在bootstrap.yml里配server.port——它会被application.yml覆盖且违反“bootstrap 管系统、application 管业务”原则。实操验证命令# 启动时强制指定 bootstrap 配置 java -jar myapp.jar --spring.config.locationclasspath:/bootstrap.yml,classpath:/application.yml # 查看所有生效配置含来源 curl http://localhost:8080/actuator/env | jq .propertySources[].name3.3 真题28配置文件的加载顺序精确到路径与 Profile题目原文28、配置文件的加载顺序 由 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)配置文件必须掌握的 5 层加载顺序按优先级从高到低优先级位置文件名触发条件1️⃣ 最高外部目录如./config/application-{profile}.ymlspring.profiles.activedev2️⃣外部目录如./config/application.yml无 profile 激活3️⃣当前目录如./application-{profile}.ymlspring.profiles.activedev4️⃣当前目录如./application.yml无 profile 激活5️⃣ 最低classpath/jar 包内application-{profile}.ymlspring.profiles.activedev6️⃣classpath/jar 包内application.yml无 profile 激活关键细节“外部目录”指java -jar命令所在目录的config/子目录或同级目录spring.config.location可覆盖默认路径如--spring.config.locationfile:./custom-config/spring.config.name可指定文件名如--spring.config.namemyapp→ 加载myapp.yml而非application.yml。易混淆点spring.profiles.active和spring.profiles.include的区别active是主 Profile决定加载哪个application-{profile}.ymlinclude是附加 Profile即使未激活也会强制加载其配置如spring.profiles.includemonitoring会额外加载application-monitoring.yml。3.4 易错点Profile 配置冲突与spring.config.import的陷阱❌ 错在哪认为application-dev.yml会完全覆盖application.yml真实情况application-dev.yml不是覆盖而是叠加。application.yml中的server.port8080和application-dev.yml中的server.port8081最终生效的是8081因为 dev 的优先级更高但application.yml中的myapp.timeout30s依然有效——除非application-dev.yml也定义了myapp.timeout。❌ 错在哪在bootstrap.yml中使用spring.config.import为什么错spring.config.import是 Spring Boot 2.4 引入的替代bootstrap.yml的新机制它在application.yml中声明由ConfigDataLocationResolver在ApplicationContext创建前解析。因此如果你用了spring.config.import就不再需要bootstrap.yml如果同时存在bootstrap.yml和spring.config.importbootstrap.yml仍会先加载但spring.config.import导入的配置会后加载并覆盖前者——造成混乱。❌ 错在哪Profile(dev)类与application-dev.yml冲突典型翻车场景Component Profile(dev) public class DevOnlyService { ... }同时application-dev.yml中配置myapp.feature.enabledfalse结果DevOnlyService仍被创建。原因Profile控制 Bean 创建application-dev.yml控制属性值二者独立。若要联动需用ConditionalOnProperty(namemyapp.feature.enabled, havingValuetrue)。✅ 正确做法用ConditionalOnExpression实现 Profile 属性联合判断Component ConditionalOnExpression(#{environment.acceptsProfiles(dev) environment.getProperty(myapp.feature.enabled, false).equals(true)}) public class DevFeatureService { ... }4. 高频考点Actuator 监控与微服务健康检查含真题逐题拆解4.1 Actuator 的核心端点设计哲学HTTP vs JMX vs SSH不是“有哪些端点”而是“为什么这样设计”health端点返回UP/DOWN/OUT_OF_SERVICE但默认不暴露详细信息show-detailsnever生产环境必须设为when_authorizedmetrics端点已废弃Spring Boot 2.0必须用micrometerprometheusenv端点极其危险默认禁用management.endpoints.web.exposure.includehealth,info因它会泄露所有配置含密码threaddump和heapdump是诊断神器但heapdump会触发 Full GC线上慎用。提示面试官若问“如何保护/actuator/env”答生产环境management.endpoints.web.exposure.includehealth,info,metrics,prometheus显式排除 env配合 Spring Security对/actuator/**做角色鉴权使用management.endpoint.env.show-valuesNEVERSpring Boot 2.3。4.2 真题8Spring Boot 中的监视器是什么题目原文8、Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。 有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。高分答案带架构视角Actuator 不是“监控工具”而是微服务可观测性的协议层Health Check/actuator/health返回聚合健康状态但真正的价值在于health-groupsSpring Boot 2.3可定义liveness存活探针只检查进程是否存活和readiness就绪探针检查 DB、Redis 是否可用K8s 用这两个端点做滚动更新Metrics/actuator/metrics是指标入口但必须集成 Micrometer它将 Spring Boot 指标JVM、HTTP、Cache统一导出为 Prometheus 格式Tracing/actuator/httptrace已废弃必须用 Spring Cloud Sleuth Zipkin实现跨服务链路追踪Audit/actuator/auditevents记录安全事件登录、权限变更但需配合Spring Security的AuditEventRepository。代码示例自定义 Health IndicatorComponent public class RedisHealthIndicator implements HealthIndicator { private final RedisConnectionFactory connectionFactory; public RedisHealthIndicator(RedisConnectionFactory connectionFactory) { this.connectionFactory connectionFactory; } Override public Health health() { try { // 执行轻量级探测 connectionFactory.getConnection().ping(); return Health.up() .withDetail(version, 6.2.6) .build(); } catch (Exception ex) { return Health.down(ex) .withDetail(error, ex.getMessage()) .build(); } } }注意HealthIndicator必须超时短 1s否则 K8s 探针会失败withDetail()里的信息不能包含敏感数据如 Redis 密码。4.3 真题33我们如何监视所有 Spring Boot 微服务题目原文33、我们如何监视所有 Spring Boot 微服务 Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息如它们是否已启动以及它们的组件如数据库等是否正常运行很有帮助。但是使用监视器的一个主要缺点或困难是我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务管理员将不得不击中所有 50 个应用程序的执行终端。架构师级答案三层整合采集层每个服务暴露/actuator/prometheusPrometheus 通过service discovery如 Consul、K8s Service自动抓取所有实例存储与查询层Prometheus 存储时序数据Grafana 做可视化面板CPU、Heap、HTTP 4xx/5xx、DB 连接池等待数告警层Prometheus Alertmanager 根据规则如up{jobmyapp} 0触发告警通过 Webhook 推送至钉钉/企业微信。避坑指南❌ 不要用/actuator/health做服务发现——它只返回 UP/DOWN无法提供 IP、端口✅ 用 Spring Cloud LoadBalancer 的ServiceInstanceListSupplier获取实例列表⚠️livenessProbe和readinessProbe的initialDelaySeconds必须不同liveness可设为 30s防假死readiness设为 5s快速就绪。K8s 配置示例livenessProbe: httpGet: path: /actuator/health/liveness port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /actuator/health/readiness port: 8080 initialDelaySeconds: 5 periodSeconds: 54.4 易错点Actuator 端点暴露与安全漏洞❌ 错在哪management.endpoints.web.exposure.include*后果/actuator/env泄露所有配置含数据库密码、API Key/actuator/heapdump可被下载内存快照含用户 Token。❌ 错在哪认为EnableWebSecurity能自动保护 Actuator真相Actuator 端点走独立的ManagementWebSecurityConfigurerAdapterSpring Boot 2.7-或SecurityFilterChain2.7必须显式配置Bean public SecurityFilterChain managementSecurityFilterChain(HttpSecurity http) throws Exception { http.requestMatcher(new ActuatorRequestMatcher()) .authorizeHttpRequests(authz - authz .requestMatchers(/actuator/health).permitAll() .requestMatchers(/actuator/**).hasRole(ADMIN)); return http.build(); }❌ 错在哪/actuator/health返回UP但服务实际不可用原因默认HealthIndicator只检查DataSource、Redis等基础组件不检查业务依赖如第三方 API 是否超时。解决方案实现ReactiveHealthIndicatorWebFlux或HealthIndicatorMVC检查关键业务接口用Scheduled定期调用第三方 API 并缓存结果HealthIndicator读缓存而非实时调用。✅ 正确姿势用HealthGroupRegistry分组健康检查Bean public HealthGroupRegistry healthGroupRegistry() { return new HealthGroupRegistry() .addGroup(liveness, new LivenessStateHealthIndicator()) .addGroup(readiness, new CompositeHealthIndicator( Map.of(db, new DataSourceHealthIndicator(dataSource)), Map.of(redis, new RedisHealthIndicator(redisConnectionFactory)) ) ); }5. 高频考点Starter 机制与依赖冲突解决含真题逐题拆解5.1 Starter 的本质不是“依赖集合”而是“自动配置契约”必须纠正的认知spring-boot-starter-web不只是spring-webmvctomcat-embed的 pom 依赖它的核心是spring-boot-autoconfigure中的WebMvcAutoConfigurationmybatis-spring-boot-starter的价值不在mybatis-spring依赖而在MybatisAutoConfiguration——它自动配置SqlSessionFactory、SqlSessionTemplate并扫描Mapper接口。Starter 的三层结构starter模块纯pom.xml声明依赖版本如spring-boot-starter-jdbcautoconfigure模块Configuration类 Conditional注解如DataSourceAutoConfigurationstarter的spring.factories将autoconfigure模块的配置类注册到EnableAutoConfiguration键下。提示面试官若问“为什么引入spring-boot-starter-data-jpa就能用JpaRepository”答因为JpaRepositoriesAutoConfiguration检测到JpaRepository接口存在自动启用EnableJpaRepositories并配置JpaTransactionManager。5.2 真题9 10 13什么是 Starter常用 Starter 有哪些题目原文9、什么是 starter? Starter 主要是用来简化 maven 依赖10、Spring Boot 常用的 Starter 有哪些 spring-boot-starter-web 提供 Spring MVC 内嵌的 Tomcat 。 spring-boot-starter-data-jpa 提供 Spring JPA Hibernate 。 spring-boot-starter-data-redis 提供 Redis 。 mybatis-spring-boot-starter 提供 MyBatis 。13、springboot 常用的 starter 有哪些 spring-boot-starter-web 嵌入tomcat 和 web 开发需要 servlet 与 jsp 支持 spring-boot-starter-data-jpa 数据库支持 spring-boot-starter-data-redis redis 数据库支持 spring-boot-starter-data-solr solr 支持 mybatis-spring-boot-starter 第三方的mybatis 集成 starter高分答案按场景分类非罗列✅Web 开发spring-boot-starter-web必备含spring-webmvctomcat-embedJacksonspring-boot-starter-webflux响应式编程替代web用Netty替代Tomcatspring-boot-starter-thymeleaf服务端模板注意它会自动配置ThymeleafViewResolver无需手动Bean。✅数据访问spring-boot-starter-data-jpaJPA Hibernate自动配置DataSource、EntityManagerFactory、JpaTransactionManagermybatis-spring-boot-starterMyBatis自动扫描Mapper接口无需MapperScan因MybatisAutoConfiguration已配置spring-boot-starter-jdbc纯 JDBC不带 ORM适合简单查询。✅分布式与中间件spring-boot-starter-amqpRabbitMQ自动配置CachingConnectionFactoryspring-boot-starter-activemqActiveMQ注意它默认使用PooledConnectionFactory需显式配置spring.activemq.pool.enabledfalse关闭避免连接池竞争。✅运维与监控spring-boot-starter-actuator监控端点必须配合micrometer-registry-prometheus才能暴露 metricsspring-boot-starter-loggingSLF4J Logback自动适配 Log4j2排除logback-classic。5.3 真题20为什么我们需要spring-boot-maven-plugin题目原文20、为什么我们需要 spring-boot-maven-plugin? spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。 spring-boot:run 运行你的 SpringBooty 应用程序。 spring-bootrepackage 重新打包你的 jar 包或者是 war 包使其可执行 spring-bootstart 和 spring-bootstop 管理 Spring Boot 应用程序的生命周期也可以说是为了集成测试。 spring-boot:build-info 生成执行器可以使用的构造信息。必须讲清的 4 个目标spring-boot:repackage将target/myapp.jar重打包为Fat Jar即把所有依赖lib/目录和启动类BOOT-INF/classes/打包进一个 jar并在MANIFEST.MF中写入Start-Class: com.example.MyApp和Main-Class: org.springframework.boot.loader.JarLauncherspring-boot:run开发时等价于mvn compile java -cp target/classes:$(mvn dependency:copy-dependencies -DoutputDirectorytarget/lib -q -Dsilenttrue -DexcludeGroupIdsorg.springframework.boot) com.example.MyApp但会自动监听 classpath 变更并热重载需配合 DevToolsspring-boot:build-info生成target/classes/META-INF/build-info.properties内容如build.artifactmyapp build.groupcom.example build.time2023-01-01T00:00:00Z build.version1.0.0Actuator的/actuator/info端点会自动读取此文件并返回spring-boot:start/stop用于集成测试启动嵌入式服务器后执行测试测试结束自动关闭——避免端口占用冲突。关键命令对比命令适用场景是否生成 Fat Jarmvn package普通 Maven 打包❌生成普通 jarmvn spring-boot:repackage生成可执行 Fat Jar✅mvn spring-boot:run开发调试❌不生成 jar直接运行 classpath5.4 易错点Starter 依赖冲突与版本锁定❌ 错在哪spring-boot-starter-parent和spring-boot-dependencies的关系搞混真相spring-boot-starter-parent是 Maven 的parent它继承 spring-boot-dependencies本文还有配套的精品资源点击获取