Appearance
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-web | Web应用开发,包括RESTful、Spring MVC |
spring-boot-starter-data-jpa | JPA数据访问,包括Hibernate |
spring-boot-starter-security | Spring Security支持 |
spring-boot-starter-test | 测试支持,包括JUnit、Mockito |
spring-boot-starter-jdbc | JDBC数据库支持 |
spring-boot-starter-thymeleaf | Thymeleaf模板引擎 |
spring-boot-starter-mail | Java Mail支持 |
spring-boot-starter-redis | Redis键值存储 |
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.0 | 2014年 | Java 6+ | 4.0 | 首个稳定版本 |
1.5 | 2017年 | Java 7+ | 4.3 | 执行器改进 |
2.0 | 2018年 | Java 8+ | 5.0 | 响应式编程支持 |
2.3 | 2020年 | Java 8+ | 5.2 | Docker镜像支持,Gradle改进 |
2.7 | 2022年 | Java 8+ | 5.3 | Spring Framework 5.3,Java 18兼容性 |
3.0 | 2022年 | Java 17+ | 6.0 | 原生GraalVM支持,Jakarta EE 9+支持 |
总结
Spring Boot极大地简化了Spring应用程序的开发,通过自动配置、起步依赖和内嵌服务器,让开发人员可以快速创建生产级别的应用程序。Spring Boot目前已成为Java应用开发的事实标准,特别是在微服务架构中。