SpringBoot系列之从繁琐配置到一键启动之旅

Spring Boot 极简入门:从繁琐配置到一键启动的魔法之旅

"Spring Boot 不是另一种框架,而是让你忘记框架的存在。"

------ 本文将带你回顾 Spring 到 Spring Boot 的演进逻辑,并用 10 分钟完成 MyBatis 集成实战。


1 为什么需要 Spring Boot?

阶段 痛点 Spring Boot 解法
Spring 早期 大量 XML 配置、依赖坐标地狱 Starter 一键依赖
Spring 4.x @Configuration + @Import 仍显啰嗦 自动装配
微服务时代 多环境配置、外部化配置混乱 application.yml 统一管理

Spring Boot 在 Spring 5.2.8 基础上,做两件事:

  1. Bean 自动注入:引入 Starter → 核心 Bean 直接就绪。
  2. 配置中心化application.yml 取代分散的 XML / properties。

2 自动装配原理(面试高频)

  1. @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
  2. spring-boot-autoconfigure 里预置 120+ 自动配置类,按需生效。
  3. @ConditionalOnClass@ConditionalOnMissingBean 精准控制 Bean 注册。

一句话约定优于配置 ------ 有就生效,没有就跳过。


3 启动流程速览

复制代码
Main 方法
   ↓
SpringApplication.run()
   ↓
推断应用类型(Servlet / Reactive)
   ↓
创建 Environment → 读取 application.yml
   ↓
调用 AutoConfigurationImportSelector → 加载 META-INF/spring.factories
   ↓
实例化 IOC 容器 → 启动内嵌 Tomcat

4 实战:Spring Boot 集成 MyBatis(3 步完成)

4.1 引入依赖(仅需 1 个 Starter

xml 复制代码
<!-- MyBatis + Spring Boot 官方 Starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.1</version>
</dependency>

<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

4.2 统一配置 application.yml

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml   # XML 映射
  type-aliases-package: com.example.entity         # 实体别名

4.3 开启 Mapper 扫描 & 使用

java 复制代码
@SpringBootApplication
@MapperScan("com.example.mapper")   // 3. 扫描 Mapper 接口
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
java 复制代码
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Long id);
}

启动后:无需任何 XML 或 JavaConfig,直接访问数据库。


5 配置文件优先级(外部化配置)

Spring Boot 按以下顺序覆盖(高 → 低):

  1. 命令行参数
  2. application-{profile}.yml
  3. application.yml
  4. 默认属性(@ConfigurationProperties

示例:

bash 复制代码
java -jar app.jar --server.port=9090 --spring.profiles.active=prod

6 面试金句速记

问题 一句话答案
Starter 是什么? 预定义依赖 + 自动配置,开箱即用。
自动装配触发条件? @ConditionalOnClass 判断类路径存在即生效。
如何关闭自动配置? @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
多环境配置? application-dev.ymlapplication-prod.yml + --spring.profiles.active

7 总结

Spring Boot 用 "约定优于配置" 的理念,把我们从 XML 地狱 拯救出来:

  • Starter 负责"一键依赖";
  • AutoConfiguration 负责"智能装配";
  • application.yml 负责"一处配置,到处生效"。

掌握这三板斧,你的 Spring Boot 面试和项目开发都能 事半功倍

相关推荐
肖老师xy19 小时前
uniapp 苹果端bug合集
java·服务器·uni-app
zlpzlpzyd19 小时前
idea 2025.2 在Windows 11中执行maven命令中文乱码处理
java·maven·intellij-idea
刘一说19 小时前
IntelliJ IDEA 查找和替换使用指南
java·ide·intellij-idea
云虎软件朱总20 小时前
同城配送系统:基于 Spring Boot+Redis+RabbitMQ 构建
spring boot·redis·java-rabbitmq
白露与泡影21 小时前
2025年高质量Java面试真题汇总
java·python·面试
꒰ঌ 安卓开发໒꒱21 小时前
Java 面试 -Java基础
java·开发语言·面试
菠菠萝宝21 小时前
【Java八股文】13-中间件面试篇
java·docker·kafka·rabbitmq·canal·rocketmq·es
瓯雅爱分享1 天前
基于Java后端与Vue前端的MES生产管理系统,涵盖生产调度、资源管控及数据分析,提供全流程可视化支持,包含完整可运行源码,助力企业提升生产效率与管理水平
java·mysql·vue·软件工程·源代码管理
做运维的阿瑞1 天前
Linux 企业级备份体系实战:cron/anacron/restic/rclone 对比与脚本总结
linux·运维·服务器·后端·学习·系统架构·centos
hello_2501 天前
k8s安全机制解析:RBAC、Service Account与安全上下文
java·安全·kubernetes