Spring Boot

SpringBoot概述

为什么需要SpringBoot

传统Spring开发的痛点:

痛点说明SpringBoot解决方案
配置地狱需要大量配置类注册组件自动配置
版本冲突依赖版本管理复杂Parent统一管理
部署繁琐需打包war + 外部Tomcat内嵌Tomcat,java -jar启动

核心思想:约定大于配置

┌─────────────────────────────────────────────────────────┐
│                    约定大于配置                          │
│                                                          │
│  传统方式                    SpringBoot方式              │
│  ─────────                  ─────────────               │
│  手动配置数据源    →         配置文件写参数,自动装配     │
│  手动配置MyBatis   →         引入starter即可             │
│  手动配置SpringMVC →         自动配置完毕                │
│                                                          │
│  开发者只需:关注业务,按需调整配置                       │
└─────────────────────────────────────────────────────────┘

章节小结

SpringBoot价值:大幅降低Spring应用搭建和开发难度,让开发者专注于业务而非配置。

快速入门

创建SpringBoot工程

方式一:IDEA创建(推荐)

  1. File → New → Project → Spring Initializr
  2. 选择Java版本、SpringBoot版本
  3. 选择依赖(Web、MyBatis等)
  4. 完成创建

方式二:官网创建

访问 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-webWeb开发包含SpringMVC、Tomcat、JSON等
spring-boot-starter-test测试JUnit、Mockito等
mybatis-spring-boot-starterMyBatis整合第三方starter
spring-boot-starter-data-jpaJPA支持数据库访问

使用方式

<!-- 无需指定版本,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.propertiesapplication.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类存在时生效
@ConditionalOnMissingBeanBean不存在时生效
@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指定环境生效类/方法
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇