SpringBoot概述
为什么需要SpringBoot
传统Spring开发的痛点:
| 痛点 | 说明 | SpringBoot解决方案 |
|---|---|---|
| 配置地狱 | 需要大量配置类注册组件 | 自动配置 |
| 版本冲突 | 依赖版本管理复杂 | Parent统一管理 |
| 部署繁琐 | 需打包war + 外部Tomcat | 内嵌Tomcat,java -jar启动 |
核心思想:约定大于配置
┌─────────────────────────────────────────────────────────┐
│ 约定大于配置 │
│ │
│ 传统方式 SpringBoot方式 │
│ ───────── ───────────── │
│ 手动配置数据源 → 配置文件写参数,自动装配 │
│ 手动配置MyBatis → 引入starter即可 │
│ 手动配置SpringMVC → 自动配置完毕 │
│ │
│ 开发者只需:关注业务,按需调整配置 │
└─────────────────────────────────────────────────────────┘
章节小结
SpringBoot价值:大幅降低Spring应用搭建和开发难度,让开发者专注于业务而非配置。
快速入门
创建SpringBoot工程
方式一:IDEA创建(推荐)
- File → New → Project → Spring Initializr
- 选择Java版本、SpringBoot版本
- 选择依赖(Web、MyBatis等)
- 完成创建
方式二:官网创建
访问 https://start.spring.io/,配置后下载项目压缩包。
项目结构
springboot-demo/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/
│ │ │ └── DemoApplication.java # 启动类
│ │ └── resources/
│ │ ├── application.yml # 配置文件
│ │ ├── static/ # 静态资源
│ │ └── templates/ # 模板文件
│ └── test/ # 测试代码
└── pom.xml # Maven配置
启动类
@SpringBootApplication // 标记为SpringBoot应用
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
⚠️ 注意:启动类建议放在项目根包下,默认扫描当前包及其子包。
编写第一个Controller
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String hello() {
return "Hello, SpringBoot!";
}
}
运行应用
# 方式一:IDEA直接运行启动类的main方法
# 方式二:命令行
mvn spring-boot:run
# 方式三:打包后运行
mvn clean package
java -jar target/demo-0.0.1-SNAPSHOT.jar
入门步骤:创建工程 → 编写启动类 → 开发业务代码 → 运行(java -jar)。
依赖管理
Parent机制
SpringBoot工程必须继承spring-boot-starter-parent:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.17</version>
</parent>
Parent的作用:
- 统一管理依赖版本(通过
spring-boot-dependencies) - 提供默认的Maven插件配置
- 指定Java版本、编码格式等
Starter依赖
| Starter | 功能 | 说明 |
|---|---|---|
spring-boot-starter-web | Web开发 | 包含SpringMVC、Tomcat、JSON等 |
spring-boot-starter-test | 测试 | JUnit、Mockito等 |
mybatis-spring-boot-starter | MyBatis整合 | 第三方starter |
spring-boot-starter-data-jpa | JPA支持 | 数据库访问 |
使用方式:
<!-- 无需指定版本,Parent已管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- 需要指定版本(Parent未管理) -->
<version>8.0.33</version>
</dependency>
配置文件
配置文件格式
SpringBoot默认读取application.properties或application.yml(推荐)。
YAML语法:
# 简单键值对
server:
port: 8080
# 对象
person:
name: 张三
age: 20
# 列表
hobbies:
- 篮球
- 游泳
- 编程
读取配置
方式一:@Value注解
@Component
public class MyConfig {
@Value("${server.port}")
private Integer port;
@Value("${person.name}")
private String name;
}
方式二:@ConfigurationProperties(推荐)
@Component
@ConfigurationProperties(prefix = "person")
public class PersonConfig {
private String name;
private Integer age;
// getter/setter
}
常用配置
server:
port: 8080 # 服务端口
servlet:
context-path: /api # 上下文路径
spring:
datasource: # 数据源配置
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
jackson: # JSON配置
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
章节小结
配置文件要点:
- YAML格式更简洁,推荐使用
- @Value适合单个属性,@ConfigurationProperties适合对象绑定
- 常用配置:server、datasource、jackson等
整合MyBatis
引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
# 可选:指定连接池类型(默认HikariCP)
type: com.alibaba.druid.pool.DruidDataSource
扫描Mapper
@SpringBootApplication
@MapperScan("com.example.mapper") // 扫描Mapper接口
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
使用Mapper
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper; // 直接注入使用
@Override
public User getById(Integer id) {
return userMapper.selectById(id);
}
}
自动配置原理
自动配置是什么
SpringBoot启动时,会自动将框架所需的Bean注册到Spring容器,无需手动配置。
核心注解链
@SpringBootApplication
├── @EnableAutoConfiguration
│ └── @Import(AutoConfigurationImportSelector.class)
│ └── 读取 META-INF/spring.factories
│ └── 根据条件注解筛选配置类
└── 注册符合条件的自动配置类到容器
条件注解
| 条件注解 | 含义 |
|---|---|
@ConditionalOnClass | 类存在时生效 |
@ConditionalOnMissingBean | Bean不存在时生效 |
@ConditionalOnProperty | 配置属性满足条件时生效 |
@Configuration
@ConditionalOnClass(DataSource.class) // 类路径有DataSource才生效
@ConditionalOnMissingBean(DataSource.class) // 容器中没有DataSource才生效
public class DataSourceAutoConfiguration {
// 自动配置数据源
}
自定义配置覆盖默认配置
SpringBoot自动配置有默认参数,开发者可通过配置文件覆盖:
# 覆盖默认的Tomcat端口
server:
port: 9090
# 覆盖默认的数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/custom_db
Profile多环境配置
什么是Profile
Profile是Spring提供的隔离应用程序配置的方式,用于区分不同运行环境(开发、测试、生产)。
配置文件命名
resources/
├── application.yml # 主配置(公共配置)
├── application-dev.yml # 开发环境
├── application-test.yml # 测试环境
└── application-prod.yml # 生产环境
激活Profile
方式一:配置文件激活
# application.yml
spring:
profiles:
active: dev # 激活dev环境
方式二:命令行激活
java -jar app.jar --spring.profiles.active=prod
方式三:IDEA激活
Run Configuration → VM options: -Dspring.profiles.active=dev
配置优先级
application-{profile}.yml > application.yml
相同配置项,Profile配置会覆盖主配置。
定时任务
开启定时任务
@SpringBootApplication
@EnableScheduling // 开启定时任务
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
定义定时任务
@Component
public class ScheduledTasks {
/**
* 每分钟执行一次
* cron: 秒 分 时 日 月 周
*/
@Scheduled(cron = "0 * * * * ?")
public void task1() {
System.out.println("每分钟执行: " + new Date());
}
/**
* 固定间隔执行(上次开始后5秒)
*/
@Scheduled(fixedRate = 5000)
public void task2() {
System.out.println("每5秒执行");
}
/**
* 固定延迟执行(上次结束后5秒)
*/
@Scheduled(fixedDelay = 5000)
public void task3() {
System.out.println("延迟5秒执行");
}
}
常用Cron表达式
| 表达式 | 含义 |
|---|---|
0 0 * ? | 每小时执行 |
0 0 12 ? | 每天中午12点 |
0 0 10,14,16 ? | 每天10点、14点、16点 |
0 0/5 * ? | 每5分钟 |
0 0 2 1 * ? | 每月1日凌晨2点 |
附录:核心注解速查表
| 注解 | 作用 | 使用位置 |
|---|---|---|
@SpringBootApplication | 标记启动类,开启自动配置 | 启动类 |
@EnableAutoConfiguration | 开启自动配置 | 配置类 |
@ConfigurationProperties | 批量绑定配置 | 类 |
@Value | 单个配置注入 | 字段 |
@MapperScan | 扫描MyBatis Mapper | 启动类 |
@EnableScheduling | 开启定时任务 | 启动类 |
@Scheduled | 定义定时任务 | 方法 |
@Profile | 指定环境生效 | 类/方法 |