SpringBoot3资料:新手入门教程与实践指南
本文全面介绍了SpringBoot3资料,包括其核心概念、新特性、下载安装方法以及如何创建和部署一个简单的SpringBoot3项目。文章还详细讲解了SpringBoot3的配置文件管理、Web开发实践以及数据库集成等关键内容。
引入SpringBoot3简介SpringBoot3的核心概念
Spring Boot 是一个基于 Spring 框架的简化开发框架,旨在提供一套快速开发的应用程序框架。Spring Boot 3.0 版本在2022年11月发布,带来了许多新的特性和改进,使得开发者能够更加高效地构建独立的、生产级别的 Spring 应用程序。
Spring Boot 3.0 的核心概念包括:
- 自动配置:Spring Boot 通过对应用进行自动配置来简化开发过程,例如自动配置一个 Web 服务器、数据库连接、缓存等。
- 起步依赖:Spring Boot 通过起步依赖简化了项目依赖的管理。开发人员只需在项目的
pom.xml
或build.gradle
文件中添加相应的起步依赖,Spring Boot 就会自动添加所有必要的依赖项。 - 命令行接口:Spring Boot 提供了一个命令行接口(CLI),允许直接运行和测试 Spring Boot 应用程序,从而简化开发流程。
- 嵌入式服务器:Spring Boot 通常与嵌入式服务器(如 Tomcat、Jetty 或 Undertow)一起使用,使得应用程序可以在同一 JVM 中运行。
- Actuator:Actuator 是 Spring Boot 的一个组件,提供了丰富的生产环境监控功能。它允许监控应用程序的运行状态,包括各种指标、健康检查和诊断信息等。
- 内置的健康检查和监控:Actuator 提供了许多内置的健康检查端点,可以用于监控应用程序的运行状态。常见的健康检查端点包括
health
、info
、metrics
、trace
等。
SpringBoot3相较于前一版本的改进
Spring Boot 3.0 版本相对于之前的版本(如 Spring Boot 2.x)有许多重要的改进和新特性:
- Java 17 支持:Spring Boot 3.0 与 Java 17 兼容,使得 Java 17 版本的特性可以直接在 Spring Boot 应用程序中使用。
- 模块化依赖:为了提高启动速度和减少应用程序的大小,Spring Boot 3.0 对依赖进行了细粒度的模块化拆分。例如,Spring Boot 依赖中的许多组件被拆分为多个独立的模块。
- Spring框架更新:Spring Boot 3.0 依赖于最新的 Spring 框架版本,包括 Spring Framework 5.3 以及 Spring Data 和 Spring Security 的最新版本。
- 增强的性能:通过改进启动过程和优化内部实现,Spring Boot 3.0 提供了更快的启动速度。这种改进使得应用程序启动更加迅速,提高了开发和测试的效率。
- 对新语言的支持:Spring Boot 3.0 引入了对 Kotlin 的更广泛支持,使得 Kotlin 语言可以无缝地集成到 Spring Boot 应用程序中。
- 新的监控和诊断功能:Actuator 在 Spring Boot 3.0 中引入了更多的监控和诊断功能。这些功能可以通过 REST API 或 HTTP 端点访问,使得开发人员可以更方便地监控应用程序的运行状态。
- HTTP/2和HTTP/3支持:Spring Boot 3.0 提供了对 HTTP/2 和 HTTP/3 协议的支持。这些协议提供了更好的网络性能和安全性,使得应用程序可以更好地服务于现代网络环境。
如何下载并安装SpringBoot3
要下载并安装 Spring Boot 3.0,可以按照以下步骤进行操作:
-
下载Spring Boot CLI(命令行接口)
- 访问 Spring Boot 的官方网站 https://spring.io/
- 导航到 "Downloads" 页面
- 选择 "Spring Boot CLI" 并下载适用于你的操作系统的版本
- 解压下载的文件,并将 Spring Boot CLI 的
bin
目录添加到系统的PATH
环境变量中
- 使用构建工具创建项目
- 如果使用 Maven,可以在命令行中执行以下命令来创建一个新的 Spring Boot 应用程序:
mvn io.spring:initializr-maven-plugin:0.6.3:run \ -DgroupId=com.example -DartifactId=hello-spring-boot -Dversion=3.0.0 -Ddependencies=web
- 如果使用 Gradle,可以在命令行中执行以下命令来创建一个新的 Spring Boot 应用程序:
./gradlew init \ --type java-application --language java --test-framework junit --profile spring-boot
- 如果使用 Maven,可以在命令行中执行以下命令来创建一个新的 Spring Boot 应用程序:
创建第一个SpringBoot3项目
准备开发环境
为了创建第一个 Spring Boot 3.0 项目,需要确保开发环境已正确配置。以下是所需环境的配置步骤:
-
安装Java
- 首先,确保已经安装了 Java 开发工具包(JDK)。推荐使用 Java 17 或更高版本。
- 可以从 Oracle 官方网站下载并安装 JDK:https://www.oracle.com/java/technologies/javase-jdk17-downloads.html
- 或者使用 OpenJDK:https://openjdk.java.net/install/
-
安装构建工具
- Maven 或 Gradle 是最常用的构建工具。确保已经安装了 Maven 或 Gradle。
- Maven 可以从 https://maven.apache.org/ 下载。
- Gradle 可以从 https://gradle.org/ 下载。
- 安装IDE
- 推荐使用 IntelliJ IDEA 或 Eclipse,这两个 IDE 都有很好的支持 Spring Boot 的插件。
- 可以从 https://www.jetbrains.com/idea/ 或 https://www.eclipse.org/downloads/ 下载。
初始化SpringBoot3项目
使用 Spring Initializr 网站或构建工具来初始化 Spring Boot 项目。
-
使用Spring Initializr网址创建项目
- 打开浏览器并访问 https://start.spring.io/
- 选择 “Maven” 或 “Gradle” 作为构建工具
- 选择项目语言为 Java
- 输入项目的基本信息,如:Group ID(比如
com.example
),Artifact ID(比如hello-spring-boot
),依赖(比如web
)
-
使用IDE创建项目
- 在 IntelliJ IDEA 中,选择 "File" -> "New" -> "Spring Initializr Project"
- 在 Eclipse 中,选择 "File" -> "New" -> "Spring Starter Project"
- 选择相应的项目配置,如依赖、语言、版本等
-
使用构建工具创建项目
- 使用 Maven 创建项目:
mvn io.spring:initializr-maven-plugin:0.6.3:run \ -DgroupId=com.example -DartifactId=hello-spring-boot -Dversion=3.0.0 -Ddependencies=web
- 使用 Gradle 创建项目:
./gradlew init \ --type java-application --language java --test-framework junit --profile spring-boot
- 使用 Maven 创建项目:
- 项目结构
- 项目结构通常包含以下目录:
src/main/java
:Java 源代码src/main/resources
:资源文件,如配置文件和静态资源src/test/java
:测试代码pom.xml
或build.gradle
:构建配置文件
- 项目结构通常包含以下目录:
运行第一个SpringBoot3应用程序
要运行第一个 Spring Boot 应用程序,可以执行以下步骤:
-
编写主类
-
创建一个 Java 类(例如
HelloApplication.java
),并将@SpringBootApplication
注解应用到该类上:package com.example.hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication public class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } @RestController public static class HelloWorldController { @GetMapping("/") public String helloWorld() { return "Hello, World!"; } } }
-
-
配置启动类
-
在
src/main/java/com/example/hello/HelloApplication.java
文件中,添加main
方法以启动应用程序:import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } }
-
-
运行应用程序
- 使用 Maven:
mvn spring-boot:run
- 使用 Gradle:
./gradlew bootRun
- 使用 IDE:可以通过 IDE 的运行配置来启动应用程序
- 使用 Maven:
- 测试应用程序
- 打开浏览器并访问
http://localhost:8080/
- 确保看到 "Hello, World!" 的响应
- 打开浏览器并访问
SpringBoot3常用配置详解
配置文件解析(application.properties和application.yml)
Spring Boot 使用 application.properties
或 application.yml
文件来配置应用程序。以下是配置文件的基本结构和示例:
-
application.properties
- 这是传统的属性文件格式,使用键值对来配置应用程序的属性。
-
示例:
# 应用程序基本信息 spring.application.name=hello-spring-boot # 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root # JPA 配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true # 日志配置 logging.level.root=INFO logging.file.name=app.log
-
application.yml
- YAML 是一种数据序列化语言,相比属性文件更加灵活。
-
示例:
spring: application: name: hello-spring-boot datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: root jpa: hibernate: ddl-auto: update show-sql: true logging: level: root: INFO file: name: app.log
配置文件的外部化
Spring Boot 支持将配置文件外部化,这样可以更灵活地管理配置。外部化配置可以通过以下几种方式实现:
-
环境变量
- 通过环境变量来配置属性:
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb export SPRING_DATASOURCE_USERNAME=root export SPRING_DATASOURCE_PASSWORD=root
- 通过环境变量来配置属性:
-
命令行参数
- 在运行应用程序时通过命令行参数指定属性:
java -jar hello-spring-boot.jar --spring.datasource.url=jdbc:mysql://localhost:3306/mydb
- 在运行应用程序时通过命令行参数指定属性:
-
命令行属性文件
- 可以使用
--spring.config.location
参数来指定配置文件的路径:java -jar hello-spring-boot.jar --spring.config.location=classpath:/config/,file:./config/
- 可以使用
- 配置文件优先级
- Spring Boot 按照一定的优先级加载配置文件:
@ConfigurationProperties
注解中的属性优先级最高- 程序员自定义的配置文件(如
application.properties
)次之 - 系统属性(如环境变量和命令行参数)再次之
- 默认属性(如
spring.main.banner-mode=none
)最低
- Spring Boot 按照一定的优先级加载配置文件:
常见配置项示例
以下是一些常见的配置项示例:
-
日志配置
logging.level.root=INFO
:设置根日志级别为INFO
logging.file.name=app.log
:定义日志输出文件的路径
-
数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
:数据库连接 URLspring.datasource.username=root
:数据库用户名spring.datasource.password=root
:数据库密码
-
JPA 配置
spring.jpa.hibernate.ddl-auto=update
:指定 Hibernate 的 DDL 模式(update,create,create-drop)spring.jpa.show-sql=true
:是否在控制台显示生成的 SQL 语句
- Web 服务器配置
server.port=8080
:设置 Web 服务器的端口server.servlet.context-path=/api
:定义 Servlet 上下文路径server.tomcat.access.log-enabled=true
:启用访问日志
SpringBoot3常见Web开发实践
创建RESTful服务
创建 RESTful 服务是 Spring Boot 应用程序中最常见的任务之一。以下是创建一个简单的 RESTful 服务的示例:
-
创建一个 REST 控制器
-
创建一个 Java 类,使用
@RestController
注解标记为 REST 控制器:package com.example.hello; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, Restful!"; } }
-
- 运行应用程序并测试 REST 服务
- 启动应用程序
- 打开浏览器并访问
http://localhost:8080/api/hello
- 确保看到 "Hello, Restful!" 的响应
使用Thymeleaf模板引擎
Thymeleaf 是一个流行的 Java 模板引擎,用于生成 HTML 文档。以下是如何在 Spring Boot 应用程序中使用 Thymeleaf 的示例:
-
添加 Thymeleaf 依赖
- 在
pom.xml
或build.gradle
文件中添加 Thymeleaf 依赖:<!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
或者
// Gradle implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
- 在
-
创建一个 Thymeleaf 模板
- 在
src/main/resources/templates
目录下创建一个 HTML 文件,例如hello.html
- 示例模板:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Hello, Thymeleaf!</title> </head> <body> <h1>Hello, Thymeleaf!</h1> <p th:text="'Hello, ' + ${name}">Hello, World!</p> </body> </html>
- 在
-
创建一个控制器来渲染模板
-
创建一个控制器来渲染模板:
package com.example.hello; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HelloController { @GetMapping("/hello") public String hello(Model model) { model.addAttribute("name", "World"); return "hello"; } }
-
- 测试模板渲染
- 启动应用程序
- 打开浏览器并访问
http://localhost:8080/hello
- 确保看到 "Hello, Thymeleaf!" 和 "Hello, World!" 的内容
静态资源的管理
Spring Boot 默认提供了一套静态资源的处理机制,可以轻松地管理和提供静态资源。
-
静态资源目录结构
- 在
src/main/resources/static
目录下创建一个css
文件夹,并添加一个样式文件,例如style.css
- 示例
style.css
文件:body { background-color: lightblue; font-family: Arial, sans-serif; } h1 { color: navy; text-align: center; }
- 在
-
访问静态资源
- 在 HTML 模板中引用静态资源,例如
hello.html
文件:<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Hello, Thymeleaf!</title> <link rel="stylesheet" th:href="@{/css/style.css}" href="/css/style.css"> </head> <body> <h1>Hello, Thymeleaf!</h1> <p th:text="'Hello, ' + ${name}">Hello, World!</p> </body> </html>
- 在 HTML 模板中引用静态资源,例如
- 测试静态资源的访问
- 启动应用程序
- 打开浏览器并访问
http://localhost:8080/hello
- 确保页面背景颜色为浅蓝色,文字颜色为深蓝色
SpringBoot3与数据库的集成
连接数据库(如MySQL和PostgreSQL)
在 Spring Boot 中连接数据库通常需要一些配置步骤,包括依赖项的添加和配置文件的设置。
-
添加数据库连接依赖
- 对于 MySQL,可以在
pom.xml
或build.gradle
文件中添加 MySQL 驱动依赖:<!-- Maven --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
或者
// Gradle implementation 'mysql:mysql-connector-java'
- 对于 PostgreSQL,可以在
pom.xml
或build.gradle
文件中添加 PostgreSQL 驱动依赖:<!-- Maven --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency>
或者
// Gradle implementation 'org.postgresql:postgresql'
- 对于 MySQL,可以在
-
配置数据源
- 在
application.properties
或application.yml
文件中配置数据源属性:# MySQL 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
或者
# PostgreSQL 数据源配置 spring: datasource: url: jdbc:postgresql://localhost:5432/mydb username: postgres password: postgres driver-class-name: org.postgresql.Driver
- 在
- 运行数据库迁移
- 使用 Spring Boot 的
spring.jpa.hibernate.ddl-auto
属性来控制数据库迁移行为:update
:更新现有的数据库结构以匹配实体类的结构create
:每次应用启动时都会创建一个新的数据库create-drop
:每次应用启动时创建一个新的数据库,在应用关闭时删除该数据库validate
:验证现有的数据库结构以匹配实体类的结构,但不进行任何修改
- 使用 Spring Boot 的
使用JPA进行数据操作
Spring Boot 使用 JPA(Java Persistence API)来执行数据操作。以下是使用 JPA 进行数据操作的示例:
-
创建一个实体类
-
创建一个 Java 类,使用
@Entity
注解标记为实体类:package com.example.hello; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getter 和 Setter 方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
-
-
创建一个仓库接口
-
创建一个接口,继承自
JpaRepository
:package com.example.hello; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository<User, Long> { }
-
-
创建一个服务类
-
创建一个服务类来处理业务逻辑:
package com.example.hello; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserRepository userRepository; public User saveUser(User user) { return userRepository.save(user); } public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } }
-
-
创建一个控制器
-
创建一个控制器来处理 HTTP 请求:
package com.example.hello; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController public class UserController { @Autowired private UserService userService; @PostMapping("/users") public User createUser(@RequestBody User user) { return userService.saveUser(user); } @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { return userService.getUserById(id); } }
-
实现简单的CRUD操作
-
创建实体类
- 在上一个示例中,已经创建了一个
User
实体类。 - 该实体类定义了
id
、name
和email
字段,并提供了相应的 getter 和 setter 方法。
- 在上一个示例中,已经创建了一个
-
创建仓库接口
- 在上一个示例中,已经创建了一个
UserRepository
接口,继承自JpaRepository
,并定义了基本的 CRUD 操作。
- 在上一个示例中,已经创建了一个
-
创建服务类
- 在上一个示例中,已经创建了一个
UserService
服务类,用于处理业务逻辑。
- 在上一个示例中,已经创建了一个
-
创建控制器
- 在上一个示例中,已经创建了一个
UserController
控制器,用于处理 HTTP 请求。
- 在上一个示例中,已经创建了一个
- 测试 CRUD 操作
- 启动应用程序
- 使用 Postman 或其他工具测试 CRUD 操作:
- POST 请求以创建用户:
http://localhost:8080/users
- GET 请求以获取用户:
http://localhost:8080/users/1
- POST 请求以创建用户:
SpringBoot3项目的打包与部署
打包SpringBoot应用程序
在 Spring Boot 应用程序开发完成后,可以将应用程序打包成一个可执行的 JAR 文件,以便于部署和发布。
-
打包步骤
- 使用 Maven 或 Gradle 打包应用程序:
mvn clean package
或者
./gradlew clean build
- 打包后的 JAR 文件通常位于
target
或build/libs
目录下
- 使用 Maven 或 Gradle 打包应用程序:
- 执行 JAR 文件
- 使用命令行运行打包好的 JAR 文件:
java -jar target/hello-spring-boot.jar
- 使用命令行运行打包好的 JAR 文件:
部署到本地服务器
将 Spring Boot 应用程序部署到本地服务器通常涉及将应用程序部署到一个支持 Java 的应用服务器(如 Tomcat)。
-
部署到Tomcat
- 将打包好的 JAR 文件复制到 Tomcat 的
webapps
目录 - 启动 Tomcat 服务器
- 打开浏览器并访问部署的应用程序
- 将打包好的 JAR 文件复制到 Tomcat 的
- 使用Docker部署
- 创建一个 Dockerfile 文件:
FROM openjdk:17-jdk-alpine COPY target/hello-spring-boot.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar"]
- 构建 Docker 镜像:
docker build -t hello-spring-boot:latest .
- 运行 Docker 容器:
docker run -p 8080:8080 -d hello-spring-boot:latest
- 创建一个 Dockerfile 文件:
部署到云端(如Docker和Kubernetes)
将 Spring Boot 应用程序部署到云平台(如 Docker 和 Kubernetes)通常需要创建 Docker 镜像并使用 Kubernetes 部署这些镜像。
-
创建Dockerfile
- 在项目根目录下创建一个
Dockerfile
文件:FROM openjdk:17-jdk-alpine COPY target/hello-spring-boot.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar"]
- 在项目根目录下创建一个
-
构建Docker镜像
- 执行以下命令构建 Docker 镜像:
docker build -t hello-spring-boot:latest .
- 执行以下命令构建 Docker 镜像:
-
创建Kubernetes部署文件
- 在项目根目录下创建一个
deployment.yaml
文件:apiVersion: apps/v1 kind: Deployment metadata: name: hello-spring-boot spec: replicas: 1 selector: matchLabels: app: hello-spring-boot template: metadata: labels: app: hello-spring-boot spec: containers: - name: hello-spring-boot image: hello-spring-boot:latest ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: hello-spring-boot spec: selector: app: hello-spring-boot ports: - name: "8080-tcp" protocol: TCP port: 8080 targetPort: 8080 type: LoadBalancer
- 在项目根目录下创建一个
- 部署到Kubernetes
- 使用
kubectl
工具部署到 Kubernetes:kubectl apply -f deployment.yaml
- 使用
共同学习,写下你的评论
评论加载中...
作者其他优质文章