1.4 开发第一个Spring Boot应用程序
本节将详细介绍Spring Boot项目的创建方法、SpringBoot项目的目录结构及项目启动的过程。
1.4.1 创建Spring Boot项目
创建Spring Boot项目的方式有多种,最常见的方式是使用官方提供的spring initializr。spring initializr是一个在线工具,用于快速生成一个新的Spring Boot项目。它提供了一个直观的Web界面,使用户能够选择所需的依赖项、项目元数据以及其他配置选项,然后生成一个压缩的项目包,可以直接下载并使用。
接下来,详细介绍使用spring initializr创建项目的具体步骤。
(1)访问spring initializr官方地址https://start.spring.io/,在打开的页面中对项目进行基本的设置,如图1-17所示。
(2)指定项目类型、编程语言及构建工具,分别对应页面中的Project、Language、Spring Boot选项,构建工具包括Maven、Gradle,编程语言可以选择Java、Kotlin或Groovy,此处选择Java语言,Maven工具,Spring Boot版本采用3.1.3。
图1-17 spring initializr页面
(3)指定项目的元信息,对应页面中的Project Metadata,此选项用于定义和描述项目的元数据。它们的主要目的是帮助标识唯一的项目,并提供有关项目的基本信息,包括Group、Artifact、Name、Description和Package name等,此处使用默认设置,读者可根据自己的情况进行修改。
(4)指定项目的打包方式,对应页面中的Packaging选项,有Jar和War两种选择,此处选择Jar。
(5)指定Java版本,此处使用17。
(6)单击右侧的ADD DEPENDENCIES按钮,可以在项目中添加额外的依赖。例如,创建一个Web应用程序,可以选择Spring Web,如图1-18所示。
图1-18 添加额外的依赖
(7)单击GENERATE按钮,将生成一个包含你选择的所有依赖和配置的zip文件。下载并解压zip文件。然后,可以使用IDEA打开和运行它。
上述所有配置信息如图1-19所示。
图1-19 完整配置信息
在Maven和Spring Initializr中,Group、Artifact、Name和Description是用来定义和描述项目的元数据。它们的主要目的是帮助唯一地标识一个项目,并提供有关项目的基本信息。以下是部分元数据的详细解释。
Group(通常称为Group ID):它通常表示项目组织的唯一标识符,如公司、组织或团队的名称。对于公司example.com,group ID可能是com.example。结合Artifact ID,Group ID可确保项目的唯一性。这是非常重要的,尤其是在将依赖添加到Maven仓库时。
Artifact(通常称为Artifact ID):它表示具体项目或模块的名称。例如,一个公司可能有多个项目,Artifact ID用于区分它们。
Name:它是项目的显示名称,通常比Artifact ID更具描述性,并可以包含空格和其他特殊字符。对于Artifact ID为user-service的项目,其Name可能是User Management Service。
当在spring initializr或其他工具中定义这些元数据时,它们通常会被添加到生成的项目的pom.xml(对于Maven项目)或其他配置文件中。这确保了项目的唯一性和可识别性,同时也为项目提供了有关其目的和用途的描述性信息。
1.4.2 Spring Boot项目目录结构
将1.4.1节下载的demo.zip文件解压至任意目录,使用IDEA打开项目。注意,由于是使用spring initializr创建的项目,之前设置的Maven信息不会被应用,因此,打开项目后需要重新设置Maven环境。
Spring Boot项目目录结构的关键部分说明如下。
src/main/java/:此目录包含项目的主要Java源代码。
src/main/resources/:存放项目的资源文件,如配置文件、国际化属性文件、SQL脚本等。
src/test/:此目录用于存放项目的测试代码和测试资源。
pom.xml:Maven的配置文件,定义了项目的依赖、插件和其他设置。
.gitignore:如果使用Git作为版本控制系统,此文件定义了不应该被加入版本控制的文件和目录。
Application.java:这是Spring Boot应用程序的入口点,它通常包含@SpringBootApplication注释,并包含main方法来启动应用程序。
在resources目录下又有如下3个目录。
static/:存放静态资源,如HTML、CSS、JavaScript文件和图片。在运行时,这些文件都是直接可访问的。
templates/:如果使用的是模板引擎(如Thymeleaf),则模板文件会存放在这里。
application.properties:Spring Boot的主配置文件。也可以选择使用application.yml文件。
1.4.3 项目启动过程
使用IDEA启动项目,首先找到项目中的启动类,其位于com.example.demo包下,名称为DemoApplication,主要代码如下。
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
这是一个非常标准的Spring Boot应用程序的启动类。代码的首行是@SpringBootApplication注解,这是一个组合注解,它包含了多个其他的Spring注解。其中最主要的3个注解如下。
@SpringBootConfiguration:表明这是一个Spring Boot配置类。
@EnableAutoConfiguration:启动Spring Boot的自动配置机制。这是Spring Boot的核心特性,它根据项目中的依赖自动配置应用程序。例如,如果你的classpath下有H2数据库和Spring Data JPA,Spring Boot会默认配置一个内存数据库和一个带有默认设置的EntityManager。
@ComponentScan:扫描当前包和所有子包中的组件,如@Component、@Service、@Repository和@Controller类。
接下来是主类的定义,通常命名为{YourProjectName}Application,但这不是强制的。这个类的目的是作为应用程序的入口点。类中定义了程序的main方法,这是Java程序的入口方法。当从命令行或IDEA运行一个Java程序时,它首先调用这个main方法。
在main方法中,调用了SpringApplication.run(DemoApplication.class, args);,这是启动Spring Boot应用程序的实际命令。
DemoApplication.class:是传递给run方法的参数,告诉Spring Boot这是启动类,Spring Boot应该从这里开始加载。
args:这是从main方法传递来的参数,允许命令行参数传递给Spring Boot应用程序。例如,你可以使用命令行参数来指定Spring Boot配置属性。
右击代码区域,在弹出的快捷菜单中选择Run 'DemoApplication.main()'或单击主类左侧的运行按钮,均可启动当前的SpringBoot项目。当运行此类时,Spring Boot会启动并初始化应用程序,加载Spring context,并启动所有配置的服务(如内嵌的Tomcat服务器),如图1-20所示。
项目启动后,会在IDEA的底部控制台出现启动日志,如图1-21所示。
这是一个典型的Spring Boot启动日志,从启动命令到应用程序完全启动,包含了各种关键信息。
Spring Boot标志与应用启动日志信息如下。
Spring Boot标志:这个美观的ASCII图标表示Spring Boot的启动。它还显示了当前使用的Spring Boot的版本(v3.1.3)。
应用程序启动信息:Starting DemoApplication using Java 17.0.8 with PID 17448 ...,应用程序DemoApplication使用Java 17.0.8启动,其进程ID是17448。
Spring Boot项目启动后,会自动开启内嵌的Tomcat服务器,其启动日志信息内容如下。
Tomcat initialized with port(s): 8080 (http):内嵌的Tomcat服务器初始化,监听8080端口。
图1-20 启动项目
图1-21 项目启动日志
Starting service [Tomcat]:Tomcat服务开始启动。
Starting Servlet engine: [Apache Tomcat/10.1.12]:Servlet引擎开始启动,使用的是Tomcat 10.1.12。
Initializing Spring embedded WebApplicationContext:Spring的WebApplicationContext开始初始化。
Root WebApplicationContext: initialization completed in 859 ms:WebApplicationContext初始化完成,花费了859毫秒。
当应用启动完毕后,会输出如下日志信息。
Tomcat started on port(s): 8080 (http) with context path:Tomcat完全启动,监听8080端口。
Started DemoApplication in 1.577 seconds (process running for 1.877):DemoApplication启动完成,启动耗时1.577秒。
上述所有日志提供了Spring Boot应用程序从开始启动到完全启动的整个过程的详细信息,这在诊断启动问题或了解应用程序启动的细节时非常有用。
至此,已经完成了Spring Boot项目从创建到运行的所有必要步骤。