一、Spring Boot 与 Maven 的初相识
(一)Spring Boot 框架简介
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。它并不是一个全新的框架,而是对 Spring 的一个封装,你以前能用 Spring 做的事情,现在用 Spring Boot 同样可以做到。
从发展历程来看,2013 年 Spring Boot 项目开始研发,旨在简化 Spring 应用的开发流程。2014 年 4 月,Spring Boot 1.0.0 正式发布,引入了如自动配置、起步依赖、命令行界面(CLI)等核心特性,为开发人员提供了一种全新的 Spring 应用开发方式。2015 年到 2017 年,Spring Boot 1.2、1.3、1.4 版本相继推出,带来了更多功能与改进,像对 Actuator 的增强、更好的测试支持等,并且 Spring Cloud 与 Spring Boot 的结合也越发紧密,助力微服务架构开发。2017 年发布的 Spring Boot 2.0 是重大版本升级,基于 Spring Framework 5 构建,支持 Java 8 及以上版本,还引入了响应式编程等新特性。2018 年往后,Spring Boot 不断进行小版本更新改进,在云原生应用开发、容器化部署、Serverless 架构等方面都发挥着重要作用,其生态系统也日益壮大,越来越多的插件和工具可供选择,进一步提升了开发效率与应用的可维护性。
Spring Boot 框架继承了 Spring MVC 框架等前辈框架的优秀特性,通过大量注解减少程序员配置工作量,提供了自动化配置等核心功能。例如,它采用 JavaConfig 的方式对 Spring 进行配置,提供了众多注解,极大提高了工作效率。在配置方面,它提供许多默认配置,当然也支持自定义配置,而且所有 Spring Boot 项目都只有一个配置文件(application.properties/application.yml),不用担心配置出错找不到问题所在。在部署上也更为简单,内置了 Tomcat、Jetty、Undertow 三种 Servlet 容器,只需一个 Java 运行环境就能运行 Spring Boot 项目,项目可以打成一个 jar 包,然后通过 "Java -jar xxx.jar" 来运行(Spring Boot 项目的入口是一个 main 方法,运行该方法即可)。另外,它还提供了 actuator 包,可以方便地对应用进行监控。
(二)Maven 工具概述
Maven 是一个跨平台的项目管理和构建工具,主要服务于 Java 平台的项目构建、依赖管理以及项目信息管理。它基于项目对象模型(POM)的概念,通过一小段描述信息就能管理项目的构建、报告和文档等内容。
在项目创建方面,Maven 有着一套标准化的流程,从项目的清理、编译、测试,再到生成报告、打包以及部署等环节,它都能帮我们自动化完成,最大化地消除了构建的重复操作。例如,在 Maven 之前,不同项目可能有不同的构建方式,而有了 Maven 后,所有项目的构建命令都相对统一规范,避免了不必要的学习成本。
在 jar 包管理上,Maven 有着强大的依赖管理机制,通过中央仓库来管理项目依赖关系。开发人员添加和更新依赖项时,无需手动下载和安装,它会自动加载工程依赖的 artifact 所依赖的其它 artifact(Transitive Dependency),这有助于减少依赖冲突和错误,提高项目的可维护性。比如,项目中需要某个 jar 包,Maven 会先在本地仓库寻找,如果没有就会自动到中央仓库去找,找到后下载到本地仓库供项目引用;若存在远程仓库(私服),也会按照相应规则去查找和获取 jar 包。
Maven 常用的命令有很多,且各有其作用:
- maven clean:对项目进行清理,删除 target 目录下编译的内容,例如在项目重新构建前,往往需要先执行这个命令来清理之前编译产生的文件。
- maven compile:编译项目源代码,将编写的 Java 代码编译成字节码文件,存放在项目的 target 目录下。
- maven test:对项目进行运行测试,运行项目中的单元测试用例,检查代码逻辑是否正确。
- maven package:打包文件并存放到项目的 target 目录下,打包好的文件通常都是编译后的 class 文件,常见的打包形式有 jar 包(Java 项目)、war 包(Web 项目)等,像普通的 Java 项目可以通过这个命令打成可执行的 jar 包用于部署等操作。
- maven install:在本地仓库生成仓库的安装包,可供其他项目引用,同时打包后的文件放到项目的 target 目录下,比如我们开发了一个公共模块,通过这个命令安装到本地仓库后,其他项目就能方便地依赖使用这个模块了。
此外,Maven 还支持插件系统,开发人员可以根据需要自定义和扩展构建过程,使其非常灵活,能适应各种不同的项目需求。同时,Maven 拥有庞大的社区支持,包括无数的插件、模板和文档,在使用过程中遇到问题也能快速找到解决办法。不过,Maven 本身是一个复杂的工具,需要一定的学习和熟悉过程,对于一些小型项目或初学者来说,可能会觉得它相对复杂难用一些,而且配置管理方面也需要手动配置项目依赖关系、构建配置等相关设置,在大型项目中可能会显得繁琐。
二、搭建 Spring Boot 开发环境
(一)JDK 环境安装与配置
首先,我们要去 JDK 官网下载对应操作系统版本的 JDK。打开浏览器,输入网址https://www.oracle.com/java/technologies/javase-downloads.html并进入 Java SE Downloads 页面,在这里你能看到各种版本的 JDK 可供选择,比如 Java SE 17、Java SE 16 等(版本会随时间变化)。接着,根据你计算机的操作系统来选择相应版本进行下载,如果是 Windows 系统,可以点击 "Windows x64 Installer" 或 "Windows x86 Installer" 下载;要是 Mac OS X 系统,则选择 "macOS Installer" 下载;使用 Linux 系统的话,就选择对应的 Linux 版本下载。下载过程中,留意选择保存文件的位置哦。
下载完成后,双击安装程序按照提示进行安装,安装时注意选择合适的安装路径等选项。安装好之后,就需要配置环境变量啦。以 Windows 系统为例,操作如下:
在电脑上找到 "此电脑" 图标,右键单击选择 "属性",接着点击 "高级系统设置",然后找到 "环境变量" 选项。
在 "系统变量" 里点击 "新建",创建一个名为 "JAVA_HOME" 的变量,变量值填写 JDK 的安装目录(例如:D:\Program Files\Java\jdk1.8.0_40 这样的具体路径)。
找到 "Path" 变量,点击 "编辑",在变量值后面添加 "% JAVA_HOME%\bin;% JAVA_HOME%\jre\bin;"(注意中间用分号隔开哦)。
还可以在 "系统变量" 里再新建一个 "CLASSPATH" 变量,变量值填写 ".;% JAVA_HOME%\lib;% JAVA_HOME%\lib\tools.jar"(最前面有个小点可别漏啦)。
配置好后,按 "Win+R" 组合键打开运行窗口,输入 "cmd" 回车进入命令行模式,输入 "java -version",如果能显示出 JDK 的版本信息,那就说明配置成功啦,可以开始后续的开发工作了。
(二)IDE 集成开发环境准备
常用的 Java 开发 IDE 有 IDEA 和 Eclipse 等,下面分别来说说它们的下载及安装过程。
IDEA:
-
下载:打开浏览器输入https://www.jetbrains.com/,进入 Jetbrains 官网,点击 "Developer Tools",再点击 "Intellij IDEA",接着点击中间的 "Download",进入 IDEA 下载界面。在这里可以看到不同版本,包括社区版(Community Edition)和旗舰版(Ultimate Edition)。社区版是免费的,但功能相对基础;旗舰版则包含更多高级功能,不过需要付费使用。根据个人需求选择合适的版本进行下载,下载时要注意选择与你操作系统相匹配的版本,比如 Windows、macOS 或 Linux 等,同时也可以根据需要选择是否包含数据库插件等其他组件哦。
-
安装:下载完后在本地找到该文件,双击运行 idea 安装程序,点击 "Next",然后选择安装路径(建议安装在非系统盘,避免占用过多系统资源),再点击 "Next",按需求选择相关选项后,点击 "Next",默认不用改,直接点 "Install" 开始安装程序,之后静候安装完成。安装完成后,会提示你是否重启,根据你的情况选择就行啦,如果已经做好准备(保存好数据了),可以直接点击 "立即重启";否则,选择 "稍后重启"。
-
配置:首次启动 IDEA 时,需要进行一些基本配置。第一次打开会让你选择工作目录,也可以后续再设置,直接点 "OK" 就行。然后会询问你是创建项目还是打开已有项目,这里我们先默认新建一个项目,完成初始设置。要是系统中没有 SDK,那需要在工具界面直接下载安装一个 SDK 哦。安装完成 SDK 后,就可以对界面进行设置啦,比如选择主题和界面字体大小等外观设置,按个人喜好来选择就行。接着可以配置插件,IDEA 支持丰富的插件扩展功能,能根据需要安装和启用相关插件呢。最后,还要配置 JDK(Java 开发工具包),指定 JDK 的安装路径,方便 IDEA 能够正确识别和运行 Java 代码哦(要是还没安装 JDK,得先去安装好哦)。此外,也可以再配置一些其他参数,像代码风格、版本控制等,根据自己的编程习惯和项目需求进行设置就好啦。配置完成后,就能使用 IDEA 进行 Java 开发了哦。
(三)Maven 工具的安装与集成
下载安装:
首先,通过百度搜索 "Maven",进入官网https://maven.apache.org/ ,在右侧选择 "Download",进入 Download 页面后,选择合适的版本下载(一般选择第三个下载,下载的是 bin.zip 结尾的文件哦)。下载好之后解压到任意路径就行啦,不过尽量别放在系统盘哦,比如可以放在 "D:\Program Files\maven" 这样的位置。
然后进行环境变量配置,添加一个 "MAVEN_HOME" 变量,值为你的 Maven 安装路径,接着在 "path" 变量中添加一个值 "% MAVEN_HOME%\bin"。配置完成后,打开命令行(按 "Win+R" 组合键,输入 "cmd" 回车),输入 "mvn --version",如果能弹出版本号,那就说明 Maven 安装成功,系统变量也配置正确了哦。
为了优化使用体验,还可以做一些额外设置哦。比如配置阿里云镜像,因为 Maven 默认使用国外的仓库,下载 jar 包时速度会很慢,配置阿里云镜像后下载速度就能快很多啦。具体操作是在 "settings.xml" 文件中的 "mirrors" 标签里输入如下内容:
xml
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
在 IDE 中集成 Maven:
以 IDEA 为例,打开 IDEA 后,单击 "File" - "Settings" 菜单,在弹出的设置窗口中找到 "Build, Execution, Deployment" - "Build Tools" - "Maven" 选项,在这里可以配置 Maven 的相关设置。"Maven home directory" 处选择前面安装好的 Maven 的路径,"User settings file" 和 "Local repository" 可以根据自己的实际配置情况来填写或者使用默认值就行啦(如果之前配置了本地仓库路径等,就选择对应的路径哦)。配置好这些后,点击 "OK" 保存设置,这样 IDEA 就能和 Maven 工具很好地集成在一起,方便后续开发项目时使用 Maven 进行依赖管理、项目构建等操作啦。
其他的 IDE 集成 Maven 的操作也大致类似,都是在相应的设置选项里找到构建工具相关设置部分,然后填入 Maven 的安装路径以及相关配置文件路径等信息就可以啦。
三、用 Maven 创建 Spring Boot 项目
(一)项目创建基础操作
在使用 Maven 创建 Spring Boot 项目时,我们既可以在终端通过命令行操作,也可以在对应的集成开发环境(IDE)里进行相关操作。
先来说说在命令行的操作方式吧。首先,打开终端(以 Windows 系统为例,按 "Win+R" 组合键,输入 "cmd" 回车进入命令行模式),然后输入指令 "mvn archetype:generate",这条指令就是用于创建项目的基础命令哦。在执行这个指令的过程中,会涉及到几个重要的参数,下面给大家详细解释一下。
"groupId" 通常代表着项目所属的组织或者团体的唯一标识,一般会采用和 Java 包命名类似的分层命名空间,比如公司域名反转的形式,像 "com.example.organization" 这样,它和 "artifactId" 一起定义了一个 Maven 项目中的模块坐标哦。
"artifactId" 则是项目模块或者服务、应用等的名称啦,例如 "core""web""user-service" 等都可以作为它的值,而且它还会出现在依赖声明当中呢。
"version" 就是用来定义项目版本号的啦,格式一般是 "X.Y.Z",其中 "X" 代表主版本号,标识项目重大版本;"Y" 是次版本号,标识新增功能;"Z" 是增量版本号,用于标识 Bug 修复哦,另外像 "SNAPSHOT" 表示当前为快照版本,意味着项目还在开发当中呢。
"package" 参数其实就是指定了项目的包名啦,要注意和前面的参数在逻辑上保持一致哦,方便后续对项目的管理以及代码的组织呢。
在 IDE 里创建项目的话(以常用的 IDEA 为例),打开 IDEA 后,点击 "File" - "New" - "Project",在弹出的窗口中选择 "Maven",然后点击 "Next",接着填写好上面提到的那些参数,比如 "groupId""artifactId""version" 等信息,再点击 "Next",配置好 Maven 的相关设置(例如 Maven 的安装路径等,之前如果已经配置好就会默认显示啦),最后点击 "Finish",这样一个基于 Maven 的 Spring Boot 项目基础结构就创建好啦。
(二)pom.xml 文件配置
接下来就是对 pom.xml 文件进行配置啦,这个文件可是 Maven 项目的核心配置文件呢,在 Spring Boot 项目中也起着至关重要的作用哦。
首先,我们可以进入https://start.spring.io/ 这个页面进行操作哦。进入页面后,会看到有一些输入框和选项需要我们填写和选择呢。
点击 "ADD DEPENDENCIES"(添加依赖)按钮,在这里可以添加项目所需要的各种依赖,比如常见的 Spring WEB 依赖 "spring-boot-starter-web",如果项目涉及到数据库操作,还可以添加对应的数据库连接依赖等哦。不同的功能需求,添加相应的依赖就能满足啦。
然后要选择合适的 Spring Boot 版本哦,这个要根据项目的具体情况以及和其他组件的兼容性等来确定呢,一般来说,选择比较稳定的、广泛使用的版本会更靠谱一些哦。
在填写 "Group" 和 "Artifact" 时,要参照我们创建项目时所填写的对应参数来进行填写呀,确保整个项目的配置一致性哦。
"Packaging" 类型的选择也很关键呢,常见的有 "jar"(一般用于普通的 Java 项目,项目可以打成一个可执行的 jar 包进行部署运行)和 "war"(常用于 Web 项目等场景哦)等,根据项目类型来选择合适的打包方式哦。
还有就是要确定 Java 版本啦,要确保选择的 Java 版本和项目所依赖的其他组件以及开发环境等是兼容的哦,比如很多 Spring Boot 项目会选择 Java 8 及以上版本呢。
配置好这些信息后,页面会生成一个 pom.xml 文件的内容示例,我们可以把它复制下来,然后替换掉我们项目中原本的 pom.xml 文件内容哦,不过要记得仔细核对一下里面的各项配置是否符合我们项目的实际需求呀,有时候可能还需要根据具体情况再做一些微调呢,比如添加一些自定义的插件配置或者其他特殊的依赖管理设置等哦。
(三)项目启动类与控制器类编写
项目的基础结构和 pom.xml 文件配置好之后,就需要编写项目启动类与控制器类啦。
在 src/main/java 这个默认路径下,我们要新建一个 package(包),按照项目的模块或者功能等合理划分包名哦,比如项目是一个电商系统,可能会有 "com.example.ecommerce.controller""com.example.ecommerce.service" 等这样的包名结构呢。
在这个新建的 package 下编写 Spring Boot 启动类,启动类需要添加 "@SpringBootApplication" 注解哦,这个注解可是个很强大的复合注解呢,它可以代替 "@EnableAutoConfiguration" 和 "@ComponentScan" 等注解,方便了我们对 Spring Boot 项目的配置呀。在启动类里面,要定义一个 "main" 方法,方法体里面通过 "SpringApplication.run (启动类的 class 对象,args)" 这样的代码来启动项目哦,例如:
java
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}
接着就是编写控制器类啦,控制器类一般会使用到像 "@RestController""@RequestMapping" 等注解哦。"@RestController" 注解其实是一个复合注解,它可以代替 "@Controller" 和 "@ResponseBody" 注解,用于标识这个类是一个处理 HTTP 请求并且返回 JSON 等格式数据的控制器类哦。"@RequestMapping" 注解则用于定义请求的路径呀,比如:
java
@RestController
@RequestMapping("/api")
public class MyController {
@RequestMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
在上面这个示例中,当我们访问 "/api/hello" 这个路径时,就会返回 "Hello, Spring Boot!" 这个字符串啦,当然实际项目中会根据业务逻辑编写更复杂的代码来处理各种请求和返回相应的数据哦。同时,要注意控制器类所在的包要在启动类所在包的子包下面哦,这样启动类才能扫描到控制器类,确保请求能够被正确处理呢。
四、项目运行与调试
(一)运行项目
当我们完成了 Spring Boot 项目的相关配置以及代码编写后,就可以运行项目啦。在项目根目录下,我们可以通过执行一些 Maven 命令来启动项目哦。
常用的命令之一就是 "mvn compile",它的作用是编译项目源代码,将我们编写的 Java 代码编译成字节码文件,并且存放在项目的 target 目录下哦。在运行项目前,通常建议先执行这个命令,确保代码能够正确编译,例如,当我们对代码进行了修改或者是初次运行项目时,执行 "mvn compile" 可以帮我们及时发现代码中可能存在的语法错误等问题呢。
而另一个非常实用的命令是 "mvn spring-boot:run",这条命令可以直接运行我们的 Spring Boot 项目哦。它会自动去加载项目所需要的依赖,然后启动项目内置的 Servlet 容器(比如 Tomcat 等),使得我们的项目能够在本地开发环境中运行起来,方便我们进行调试和查看运行效果呀。
需要注意的是,这些命令一定要在项目的根目录下执行哦,也就是包含 pom.xml 文件的那个目录呢。如果在错误的目录下运行命令,Maven 是无法找到项目的配置信息以及相关代码的,就会报错啦。比如,假设你的项目目录结构是这样的:"myproject/pom.xml","myproject/src/main/java" 等,那你就得在 "myproject" 这个目录下执行上述命令哦。另外,在执行 "mvn spring-boot:run" 命令时,如果项目依赖比较多或者网络不太好,可能会花费一些时间去下载依赖,这时候需要耐心等待一下哦。
(二)处理报错与调试
在运行 Spring Boot 项目的过程中,难免会遇到各种各样的报错情况呀,下面就针对一些常见的报错来介绍下如何解决哦。
比如说,有时候会遇到 "找不到 junit" 这样的报错,这可能是因为项目中缺少对应的 JUnit 依赖或者依赖版本不正确哦。这时候,我们就需要去 pom.xml 文件里添加或修改依赖代码啦。如果是使用 JUnit 5 进行单元测试,而项目默认使用的是 JUnit 4 的依赖(比如 spring-boot-starter-test 默认使用的是 JUnit 4),那我们就需要手动添加 JUnit 5 的依赖哦。可以通过以下方式在 pom.xml 文件中添加依赖:
xml
<!-- Junit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
或者也可以采用下面这种更详细的方式添加相关依赖:
xml
<!-- Junit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
并且如果必要的话,还可以将 spring-boot-starter-test 中的 junit-vintage-engine 排除掉哦,像这样:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
再比如,如果遇到类似于 "程序包 XXX 不存在" 这样的报错,首先要检查 pom.xml 文件中是否添加了对应包的 dependency,如果已经添加了,那可能还存在其他问题,比如依赖冲突或者版本不兼容等情况哦。这时候就需要仔细核对相关依赖的版本以及与项目中其他组件的兼容性啦。
总之,遇到报错不要慌,仔细查看报错信息,根据提示去 pom.xml 文件里调整依赖相关的配置,往往就能解决问题,保障项目能正常运行起来哦。
五、Spring Boot 项目的相关特性说明
(一)内嵌服务器优势
Spring Boot 项目中内嵌服务器这一特性带来了诸多便利。以最常用的内嵌 Tomcat 服务器为例,首先,它让我们无须再进行额外的部署动作。以往我们开发 Web 项目时,需要先在服务器环境中安装并配置像 Tomcat 这样的 Web 服务器,然后将项目打包成 war 包,放置到 Tomcat 特定的目录下才能启动运行项目,操作较为繁琐。而 Spring Boot 项目则可以直接将应用打包成一个可执行的 jar 包,通过简单的 "Java -jar xxx.jar" 命令就能运行,因为它已经内置了服务器,这大大简化了项目的部署流程,节省了时间和精力。
其次,内嵌服务器默认会监听本地的特定端口,比如 Tomcat 默认监听 8080 端口(当然,我们也可以通过配置文件轻松修改这个端口号,像在 application.properties 或 application.yml 中配置 "server.port = 你想要的端口号" 即可)。开发人员在本地进行开发调试时,能很便捷地通过浏览器访问对应的端口,查看项目运行效果,不需要担心服务器相关的复杂配置问题。而且,对于微服务架构的项目来说,每个微服务都可以作为一个独立的 Spring Boot 应用,自带内嵌服务器,便于各个微服务的单独部署和运行,使得整个微服务体系的搭建和管理更加高效。此外,Spring Boot 还支持除 Tomcat 之外的 Jetty、Undertow 等内嵌服务器,开发人员可以根据项目的具体需求和特点,灵活地选择或切换不同的内嵌服务器,进一步体现了其便捷性和灵活性。
(二)基于注解的管理方式
Spring Boot 项目采用注解方式进行管理,这是其一大亮点,极大地提升了开发效率。例如,在自动化配置方面,通过像 "@EnableAutoConfiguration" 这样的注解,Spring Boot 会根据我们在 pom.xml 文件里添加的依赖以及项目中的配置情况,自动去创建所需要的配置。它会扫描项目中所引入的各种库,然后依据条件注解等机制,为项目应用一套合理的默认配置,减少了开发人员手动去逐个配置各种组件的工作量。
在组件扫描上,"@ComponentScan" 注解发挥着关键作用。它可以指定需要扫描的包路径,默认情况下会扫描主应用类所在包及其子包中的所有类,只要这些类带有如 "@Component""@Service""@Repository""@Controller" 等特定注解,就会被自动识别并注册为 Spring Bean,放入 Spring 容器中进行管理,方便后续的依赖注入等操作。
对于请求映射,"@RequestMapping" 及其衍生注解(如 "@GetMapping""@PostMapping""@PutMapping""@DeleteMapping" 等)让处理 HTTP 请求变得简单直观。我们可以在控制器类的方法上添加这些注解,来定义该方法处理的具体请求路径和请求方式,将 Web 请求路径准确地映射到对应的处理方法上。比如,使用 "@GetMapping ("/user")" 注解的方法,就可以用来处理对 "/user" 这个路径的 GET 请求,返回相应的数据。
而且,像 "@RestController" 注解,它是一个复合注解,整合了 "@Controller" 和 "@ResponseBody" 的功能,意味着使用了这个注解的类不仅被标识为处理 HTTP 请求的控制器类,而且其方法返回的数据会自动转换为 JSON 等格式返回给客户端,无需再额外进行繁琐的配置来处理数据格式转换问题。总之,Spring Boot 以注解方式进行管理,贯穿了项目的各个环节,让开发过程更加简洁、高效。