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 面试和项目开发都能 事半功倍

相关推荐
葫芦和十三3 小时前
图解 MongoDB 21|选举与 failover:Primary 是怎么选出来的
后端·mongodb·agent
GetcharZp4 小时前
26k Star 开源内网穿透神器 NetBird,一分钟实现全球设备互联!
后端
考虑考虑4 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯5 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
lizhongxuan7 小时前
多Agent之间的区别
后端
青石路9 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
杨充9 小时前
1.面向对象设计思想
后端
IT_陈寒10 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
systemPro10 小时前
2.6亿条设备数据,历史查询从超时到50ms,我做了什么
后端
要阿尔卑斯吗10 小时前
提示词优化启示:为什么“按顺序输出“比“关键度评分“更有效
后端