Spring Boot是一个非常流行,受欢迎的框架,它不仅常用于构建传统的单体式MVC应用程序,同时也非常适合用于搭建微服务架构。对于 Web 应用程序,Spring Boot 提供了用于创建 REST API、处理 HTTP 请求和使用 Thymeleaf 等模板引擎呈现视图的工具。同样,对于微服务,Spring Boot 通过使用其服务发现、负载平衡和配置管理等功能来支持 Spring Cloud。
本文向初学者介绍了 Spring boot 框架,并一步步引导创建第一个 Spring boot 项目,主要功能是显示 hello world 消息。
Spring Boot简介
Spring Boot 是一个开源框架,可简化基于 Spring 的应用程序的开发。Spring Boot 建立在 Spring Framework 之上,并提供各种工具、库和约定来简化应用程序的配置和部署。
Spring Boot 对 Spring 平台和第三方库有着独特的集成方式。当你在类路径中添加这些库时,Spring Boot 会自动检测并配置这些库中最常用的功能。即便如此,它也允许你覆盖、自定义或是完全禁用任何模块或库的自动配置。
例如,如果我们想在应用程序中添加持久化功能,我们只需在项目中添加 spring-boot-starter-data-jpa 依赖项,这样 Spring Boot 就会自动为我们执行以下操作:
- 引入必要的依赖项,如 Jakarta Persistence API (JPA) 和 Hibernate 等。
- 设置数据源 (DataSource)、EntityManagerFactory 以及事务管理 (PlatformTransactionManager)。
- 扫描应用程序的类路径以查找带有 @Entity 注解的类,并将其注册到 Spring 上下文中。
- 扫描 JpaRepository 或相关接口,并对其进行配置以支持基本的 CRUD 操作。
- 从 application.properties 文件中读取数据库连接属性,并建立与指定数据库的连接。
- 配置默认的连接池(如 HikariCP),以优化数据库连接并有效地重用它们。
如果没有 Spring Boot,我们需要手动配置上述所有功能。Spring Boot 的自动配置消除了这种麻烦,为我们自动完成了这些配置工作。然而,如果默认配置不满足需求,我们可以通过创建特定的 Bean 或编写自定义属性来进一步定制上述任何功能。
Spring Boot显著特性
Spring Boot框架在任何普通应用程序中通常提供以下功能:
- Spring Boot Starters:Starters 是常用功能的封装(如 Web 应用程序、持久化、国际化等)的预配置模板。我们在前面已经讨论了 spring-boot-starter-data-jpa 例子。
- 自动配置:Spring Boot 采用“约定优于配置”的原则,并根据项目的依赖项和设置自动配置 Bean。这意味着当你添加某个库到类路径中时,Spring Boot 会自动检测并配置该库的必要组件。
- 嵌入式服务器:Spring Boot 包含嵌入式的 Servlet 容器(默认为 Tomcat),这使得你无需外部服务器即可运行应用程序。这样可以简化开发环境的设置和部署流程。
- Actuator功能:Spring Boot 提供了生产就绪的功能,例如健康检查、性能指标监控、安全性增强以及外部化配置支持。这些功能通过 Spring Boot Actuator 提供,帮助开发者在生产环境中更好地管理和监控应用。
Spring Boot 的局限性和缺点
凡事都有代价。Spring Boot 也不例外。以下是使用 Spring Boot 的限制或缺点:
- 难以掌控所有细节:由于 Spring Boot 在后台自动执行了许多任务,新开发者可能会发现难以追踪所有细节。相比之下,如果不使用 Spring Boot,虽然需要手动编写更多代码并且耗时较长,但这能让开发者对系统有更多的控制权。
- 使用非标准库时较麻烦:Spring Boot 的自动配置方法可能不总是符合特定项目的需求。例如,默认情况下,Spring Boot 使用 HikariCP 作为连接池实现。如果我们希望使用组织内部的自定义连接池,则可能需要额外的工作来覆盖或替换 Spring Boot 的默认配置。
- 调试复杂:由于自动配置和背后的“魔法”,调试复杂的问题可能会更具挑战性。开发者可能难以完全理解各个组件是如何相互连接和协作的。
Spring Boot开发准备
在开始开发第一个Spring Boot应用程序之前,请确保我们具备以下条件:
- Java 开发工具包 (JDK):Spring Boot 在 Java 上运行。对于 Spring Boot 3.x,最低要求版本为 Java 17。Spring Boot 2.x 要求最低 JDK 8 或更高版本。
- 构建工具:Maven 或 Gradle 等构建工具将有助于管理项目的依赖项和构建过程。
- 集成开发环境 (IDE):虽然也可以在文本编辑器中编写和运行应用程序,但使用 IntelliJ IDEA、Eclipse 或 Visual Studio Code 等 IDE 有助于实现代码完成、自动编译、调试和项目管理等功能。
此外,还需要具备 Java 编程和 Spring 框架的基本知识。这将帮助您更深入地理解 Spring Boot 的自动配置机制及其背后的工作原理。
创建 Spring Boot 项目
对于初学者来说,创建新的 Spring Boot 项目的最简单方法是使用 Spring Initializr 网站。它允许您在一个界面上选择首选的构建工具(如 Maven 或 Gradle)、Java 版本以及所需的项目依赖项。
选择所有首选项后,您可以将项目下载为 ZIP 文件,并在解压后将其作为现有的 Maven 项目导入 IDE。在本次演示中,我们可以使用 IntelliJ IDEA 来编写和执行代码。
Spring Initializr 生成的代码揭秘
接下来,让我们了解下应用程序中的代码结构和生成的文件。
工程结构
项目中的主要目录:
- /src/main/java:包含应用程序的 Java 源代码。我们在此目录中编写所有新类和接口。
- /src/test/java:包含应用程序的测试代码。所有新单元测试都放在此目录中。
- /src/main/resources:包含应用程序使用的非 Java 资源。例如,属性文件、视图文件、配置文件等。
当我们构建应用程序时,所有编译后的文件都进入 /target 目录。构建工具从此目录生成部署存档文件(.jar 或 .war 文件)。
生成的文件
该工具生成的主要文件有:
MyFirstAppApplication.java
它包含作为应用程序运行时起点的 main() 方法。该类上通常会有 @SpringBootApplication 注解,该注解会触发自动配置和组件扫描,从而配置应用程序中的所有 Bean 并将它们注册到 Spring 应用程序上下文中。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyFirstAppApplication {public static void main(String[] args) {SpringApplication.run(MyFirstAppApplication.class, args);}
}
MyFirstAppApplicationTests.java
它包含 Junit 5 测试,用于对应用程序代码进行单元测试。我们可以在包中创建更多这样的类。
@SpringBootTest
class MyFirstAppApplicationTests {@Testvoid contextLoads() {}
}
application.properties
它包含配置特定模块所需的默认属性。默认情况下,它是空的。
pom.xml
这是管理项目依赖项和其他库的构建文件。我们可以通过此文件来添加或删除依赖项。
请注意,spring-boot-starter-parent 是一个特殊的 Maven 项目,它作为所有 Spring Boot 应用程序的父项目或超级 POM。它控制着启动器模块提供的默认功能及依赖库的版本。
spring-boot-maven-plugin 是由 Spring 团队提供的 Maven 插件,它简化了构建和打包 Spring Boot 应用程序的过程,使其可执行且易于部署。
<?xml version="1.0" encoding="UTF-8"?>
<project ...><modelVersion>4.0.0</modelVersion><!-- The parent is always the spring-boot-starter-parent --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.howtodoinjava.demo</groupId><artifactId>my-first-app</artifactId><version>0.0.1-SNAPSHOT</version><name>my-first-app</name><description>My First Application with Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
编写第一个Controller
生成的应用程序仅提供必要的基础架构,我们需要编写额外的业务逻辑来满足最终用户的需求。例如,我们可以编写一个简单的 REST API,它接收用户的输入,连接到后端数据库,并以 JSON 或 XML 格式返回适当的响应。
在本教程中,我们编写了一个简单的 API,它返回消息“Hello, World!”作为响应。我们创建一个新的类 HelloWorldController 并编写以下代码:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloWorldController {@GetMapping("hello")String hello() {return "Hello, World!";}
}
构建应用程序
创建控制器后,我们可以在 IDE 中直接测试 API,这正是 IDE 的便利之处。
如果不使用 IDE,则需要编译应用程序并将它构建为一个可执行的 JAR 文件。这个 JAR 文件可以从命令行像普通应用程序一样运行。
mvn build
它在/target目录下生成一个名为my-first-app-0.0.1-SNAPSHOT.jar的jar文件。我们可以在pom.xml文件中自定义生成的jar文件的名称。
<build><finalName>my-first-spring-boot-app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
现在我们再次运行“mvn package”命令,它会创建名为 my-first-spring-boot-app.jar 的 jar 文件。
运行并测试程序
要在开发环境中运行应用程序,我们可以直接从 IDE 运行。为此,右键单击 MyFirstAppApplication.java 并选择“运行 MyFirstAppApplication.main()` 选项。
执行上述操作后,应用程序将在嵌入式 Tomcat 服务器中运行,该服务器自动包含在 spring-boot-starter-web 模块中。
要从终端或命令提示符运行应用程序,我们可以使用以下命令:
mvn spring-boot:run
它从终端启动应用程序,我们可以在打印的日志中验证这一点。
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< com.howtodoinjava.demo:my-first-app >-----------------
[INFO] Building my-first-app 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] Attaching agents: []. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v3.1.2)2024-10-08T16:40:26.550+05:30 INFO 21616 --- [main] c.h.demo.MyFirstAppApplication : Starting MyFirstAppApplication using Java 19-loom with PID 21616 (C:\Users\lokes\Downloads\my-first-app\my-first-app\target\classes started by lokesh in C:\Users\lokes\Downloads\my-first-app\my-first-app)
...
...
...
2024-10-08T16:40:28.085+05:30 INFO 21616 --- [main] c.h.demo.MyFirstAppApplication : Started MyFirstAppApplication in 2.091 seconds (process running for 2.486)
应用程序启动后,我们可以访问 hello world API 来验证一切是否按预期工作。
curl -X GET http://localhost:8080/hello//Prints Hello, World!
常见问题解答
如何通过Maven创建Spring Boot应用程序
使用 Maven 创建 Spring boot 项目与创建任何其他普通 Web 项目类似。创建项目后,我们必须添加 pom.xml 以引用父 pom spring-boot-starter-parent 并创建/修改其他文件。
mvn archetype:generate -DgroupId=com.howtodoinjava.demo \
-DartifactId=my-first-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
如何通过Spring Boot CLI创建Spring Boot应用程序
Spring Boot CLI 是一个命令行工具,用于简化 Spring Boot 应用程序的开发。它提供了一种方便的方式来快速创建、开发和测试 Spring Boot 项目,而无需设置复杂的项目结构或手动配置依赖项。
我们可以从 Spring Boot 官方网站下载 CLI,也可以使用 SDKMAN 等包管理器进行安装。
安装 CLI 后,导航到我们要创建项目的目录,然后运行以下命令:
spring init --dependencies=web \
--build=maven \
--groupId=com.howtodoinjava.demo \
--artifactId=my-first-app \
--name=MyFirstApp
它将从头开始创建一个 Spring Boot 应用程序,您可以在自己喜欢的 IDE 中打开该项目并开始进行更改。
如何在 IntelliJ(或任何其他 IDE)中创建 Spring Boot 应用程序?
在 IntelliJ 或任何其他 IDE 中创建一个新的 Spring boot 项目与任何其他非 Spring boot 应用程序类似。我们通过选择适当的 maven 坐标和属性来创建一个普通的 Java 项目。
创建项目后,我们必须修改pom.xml以获取父pom引用并导入附加的spring boot启动模块和插件。
总结
本 Spring Boot 教程涵盖了该框架的基本概念,包括其功能、优势和潜在局限性。接着,我们探讨了启动简单 Spring Boot 项目的不同方法,例如使用 Spring Initializr 网站、命令行工具以及 IntelliJ 等 IDE。
我们开发了一个简单的 REST API,构建了该项目,并将其部署在嵌入式 Tomcat 服务器中。最后,我们测试了该 API,圆满结束了本次 Spring Boot 入门教程。
祝您学习顺利!