Skip to content

SpringBoot 概述

什么是Spring Boot?

Spring Boot 是Spring框架的扩展,它消除了设置Spring应用程序所需的大量样板配置。Spring Boot旨在让开发者尽可能快地启动和运行Spring应用程序,专注于业务需求而非基础架构。

Spring Boot的核心特性

1. 自动配置

Spring Boot会根据添加的依赖自动配置Spring应用程序。例如,如果有H2数据库依赖,Spring Boot会自动配置内存数据库,而无需显式配置。

2. 起步依赖

Spring Boot提供了一系列"起步依赖"(Starter Dependencies),这些依赖将常用库打包为单个依赖项,大大简化了依赖管理。

xml
<!-- Maven POM文件中引入Web开发起步依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3. 内嵌Web服务器

Spring Boot内置了多种Web服务器,如Tomcat、Jetty或Undertow,可以构建独立可执行的JAR文件,无需部署WAR文件到外部容器。

4. Actuator

提供了生产级特性,如健康检查、监控和度量,帮助管理和监控应用程序。

5. 灵活的配置

Spring Boot允许通过属性文件、YAML文件、环境变量和命令行参数等多种方式进行配置。

Spring Boot与Spring Framework的关系

Spring Boot建立在Spring Framework之上,不是替代品,而是简化使用Spring的方式:

  • Spring Boot使用了Spring Framework的核心特性,如IOC和AOP
  • Spring Boot封装了Spring的复杂配置
  • Spring Boot不会替换任何Spring功能,只是简化其使用
  • Spring Boot可以看作是Spring的"脚手架"

Spring Boot项目结构

典型的Spring Boot项目结构如下:

myapp/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/myapp/
│   │   │       ├── MyAppApplication.java
│   │   │       ├── controller/
│   │   │       ├── service/
│   │   │       ├── repository/
│   │   │       └── model/
│   │   └── resources/
│   │       ├── application.properties
│   │       ├── static/
│   │       └── templates/
│   └── test/
│       └── java/
│           └── com/example/myapp/
│               └── MyAppApplicationTests.java
├── .gitignore
├── pom.xml
└── README.md

创建Spring Boot应用

使用Spring Initializr

可以通过Spring Initializr在线生成项目,或使用IDE集成的Spring Initializr。

使用Spring Boot CLI

bash
spring init --dependencies=web,data-jpa my-project

使用IDE创建

大多数现代IDE(如IntelliJ IDEA、Eclipse、VS Code)都集成了对Spring Boot的支持。

Spring Boot应用引导类

java
package com.example.myapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyAppApplication.class, args);
    }
}

@SpringBootApplication注解是一个便捷注解,相当于同时使用了@Configuration@EnableAutoConfiguration@ComponentScan

Spring Boot配置文件

application.properties

properties
# 服务器配置
server.port=8080
server.servlet.context-path=/api

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

application.yml

yaml
server:
  port: 8080
  servlet:
    context-path: /api

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

Spring Boot Profile

通过Profile可以为不同环境提供不同配置:

application.properties          # 主配置文件
application-dev.properties      # 开发环境配置
application-test.properties     # 测试环境配置
application-prod.properties     # 生产环境配置

激活特定Profile:

properties
spring.profiles.active=dev

Spring Boot依赖管理

Spring Boot使用依赖管理来确保所有依赖版本兼容。在Maven中使用parent POM:

xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.0</version>
    <relativePath/>
</parent>

Spring Boot常用起步依赖

起步依赖描述
spring-boot-starter-webWeb应用开发,包括RESTful、Spring MVC
spring-boot-starter-data-jpaJPA数据访问,包括Hibernate
spring-boot-starter-securitySpring Security支持
spring-boot-starter-test测试支持,包括JUnit、Mockito
spring-boot-starter-jdbcJDBC数据库支持
spring-boot-starter-thymeleafThymeleaf模板引擎
spring-boot-starter-mailJava Mail支持
spring-boot-starter-redisRedis键值存储
spring-boot-starter-actuator监控和管理

构建可执行JAR

Spring Boot Maven插件可以创建可执行JAR文件:

xml
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

构建和运行应用:

bash
mvn package
java -jar target/myapp-0.0.1-SNAPSHOT.jar

Spring Boot的版本历史

版本发布日期Java要求Spring Framework版本主要特性
1.02014年Java 6+4.0首个稳定版本
1.52017年Java 7+4.3执行器改进
2.02018年Java 8+5.0响应式编程支持
2.32020年Java 8+5.2Docker镜像支持,Gradle改进
2.72022年Java 8+5.3Spring Framework 5.3,Java 18兼容性
3.02022年Java 17+6.0原生GraalVM支持,Jakarta EE 9+支持

总结

Spring Boot极大地简化了Spring应用程序的开发,通过自动配置、起步依赖和内嵌服务器,让开发人员可以快速创建生产级别的应用程序。Spring Boot目前已成为Java应用开发的事实标准,特别是在微服务架构中。