Spring Boot 2从入门到入坟 | 基础入门篇:Hello World入门
在这篇文章中,我们就来编写一个Spring Boot的Hello World入门程序,来体会一下Spring Boot的用法。
系统要求
Spring Boot对我们的系统是有要求的,即Java必须是
8及以上版本,以及Maven必须是
3.3及以上版本。当然,这也在Spring Boot的官方文档里面说的很清楚了,下面会给出Spring Boot官方文档的地址。
- Spring Boot官方文档的地址:https://docs.spring.io/spring-boot/docs/current/reference/html/
进来
Getting Started(即快速入门)这一章节中,然后你就能在
2. System Requirements这一小节中看到Spring Boot对我们系统的要求了,如下图所示。
可以看到,当前
Spring Boot 2.4.5版本要求Java必须是
8及以上版本,另外,Maven也必须是
3.3及以上版本。
当然了,我们也应该来检查一下本地环境是不是没有问题了,怎么检查呢?很简单,在命令行窗口中依次输入
java -version、
mvn -v命令来分别查看一下Java和Maven使用的版本,如下图所示。
可以看到笔者这儿使用的Java版本是
1.8.0_181,Maven版本是
3.6.2,这是完全没有问题的。
在我们来正式编写Spring Boot的Hello World入门程序之前,咱们还得来对Maven来做一个统一的设置,找到Maven的settings.xml全局配置文件,然后打开,添加上如下两个配置。
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors> <profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> <maven.compiler.encoding>utf-8</maven.compiler.encoding> </properties> </profile> </profiles>
第一个配置说的是让Maven使用阿里云的镜像,这样我们以后下载依赖就很快了;第二个配置说的是让Maven使用
jdk 1.8来进行项目编译,这样就会避免我们项目开发中遇到的一些问题了。
当然了,如果你以前就在settings.xml全局配置文件里面配置过镜像或者
<profiles>,那么你也可以对照着上面的两个配置来进行修改哟;如果没配过,那么就直接复制粘贴。OK,接下来,咱们就要来正式编写一个Spring Boot的Hello World入门程序了。
Hello World入门小程序
首先,我们来看一下需求,需求很简单,就是我们通过浏览器发送一个
/hello请求,服务器最终给浏览器响应一个字符串,例如
Hello, Spring Boot 2!。
明确需求之后,我们知道这是一个典型的Web开发,如果我们还是用以前原生Spring的方式来开发,那么我们需要创建一个项目,然后导入Spring、Spring MVC等一大堆的依赖,导进来以后,还得再来编写Spring、Spring MVC的配置文件,除此之外,还得整合它俩,以及整合它俩时还要编写它们之间的整合配置,这些弄完以后,我们才能来编写咱们的代码,最终,将我们的整个应用再来部署到Tomcat服务器上,当然了,我们也可以在IDEA中整合上Tomcat服务器,再来启动运行咱们的整个应用。但是你不觉得这样做,都特别麻烦吗?
因此,咱们就来看一下Spring Boot是怎么做的。不妨先参照一下Spring Boot的官方文档,还是进入到
Getting Started(即快速入门)这一章节中,进来之后,展开
4. Developing Your First Spring Boot Application这一小节,你就能知道如何来开发咱们的第一个Spring Boot应用了。
创建maven工程
首先,第一步是
Creating the POM,即创建一个maven工程。那么如何使用IDEA来创建一个maven工程呢?大家只要遵循以下步骤即可。
(1)大家在创建一个maven工程之前,一定要确认你自个的IDEA里面是否整合了maven。那么如何确认呢?首先,进入IDEA的设置界面中,并依次展开
Build, Execution, Deployment和
Build Tools这两项,这时你会看到
Maven,选中它之后,可以看到如下图所示的界面。
从以上界面中,可以看到在笔者本人的IDEA里面已经整合了自己的maven了,而且用的也是笔者自己的settings.xml全局配置文件。如果你的IDEA里面没有整合你自己的maven,那么请你重新配置一下。
(2)现在正式开始来创建一个maven工程。首先,点击菜单栏中的
File菜单,并在其下拉列表中选中
New第一项,然后再在弹出的下拉列表中选中
Project...这一项,如下图所示。
这时,会弹出如下对话框。
接着,在以上对话框中的左侧选中
Maven这一项,并直接点击
Next按钮。
这时,应该会弹出如下对话框。
紧接着,在以上对话框中展开
Artifact Coordinates,并依次在
GroupId和
ArtifactId这两项中填写相应的内容,如下图所示。
最后,点击
Finish按钮,发现弹出了如下对话框,当然了,你在创建maven工程时,有可能不会看到这个对话框,之所以笔者这儿会出现这个对话框,是因为笔者之前已经创建过一个工程,看到
HelloLiayun工程没?
那在这里,笔者就选择还是在IDEA的以上窗口中打开刚刚创建的maven工程了,即点击以上对话框中的
This Window按钮。这时,应该就能看到创建的maven工程了,如下图所示。
温馨提示:创建maven工程,其实还有更快的创建方式,不过这得等到后面再说了。
maven工程创建好了以后,接下来该怎么做呢?我们不妨再来参照一下Spring Boot的官方文档,在
4.1. Creating the POM这一小节中,我们发现如果想要使用Spring Boot来进行开发,那么在咱们maven工程的pom.xml文件里面必须导入如下一个父工程。
导进来之后,我们能看到咱们使用的Spring Boot是
2.4.5这个版本的,而且还能看到导入的父工程的名字叫做
spring-boot-starter-parent,这是一个固定写法哟😀
至此,我们的第一步就算是做完了,即创建了一个maven工程,并让它使用了Spring Boot。
引入依赖
第二步,由于我们现在是在开发一个Web应用,所以应该引入如下依赖。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
如果要是以前,那么我们还得导入Spring、Spring MVC等一大堆的依赖,而现在我们只需要引入一个依赖即可,这个依赖就是
spring-boot-starter-web,我们称之为Web的场景启动器,也就是说,如果你现在想要开发Web场景的应用,那么把这个依赖引入过来就行了。现在我们正是在开发Web场景的应用,所以我们只须把Web场景启动器这个依赖引入进来就行。
以上依赖引入进来之后,我们不妨展开maven工程下的
External Libraries目录,会发现Web场景开发里面几乎用到的所有jar包全部都给导入进来了,如下图所示。
包括与Spring MVC相关的、与Spring核心容器相关的以及日志相关的一大堆jar包等等都默认导入进来了。所以,我们现在使用Spring Boot来做Web开发,只需要导入一个依赖就行了。
创建主程序
第三步,人家官方文档是说
Writing the Code,即直接编写代码,如下图所示。
然后,我们来看看人家官方文档是怎么写的,人家官方文档也为我们写了一个示例类,并且在该示例类中还编写了一个方法,该方法是用于处理
/请求的,处理完之后会返回一个
Hello World!字符串,明眼一看就知道这是Spring MVC的写法。除此之外,该示例类中还编写了一个主方法。所以,接下来我也会仿照着该示例类来编写,以解决一开始提出来的那个需求。
首先,创建一个类,例如MainApplication,我们把该类称为主程序,当然了,这个类名你是可以随便起的。
package com.meimeixia.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author liayun * @create 2021-04-19 4:02 */ @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); // 这是固定写法哟 } }
可以看到,我们在该类上标注了一个
@SpringBootApplication注解,这个注解的作用是来告诉Spring Boot,咱们编写的类是一个Spring Boot应用。记住,我们必须用这个注解来告诉Spring Boot这是一个Spring Boot应用。还有,我们可以把标注了@SpringBootApplication注解的类称之为主程序类,主程序类相当于是我们所有启动的入口哟😀。
接下来,我们就要编写我们的业务逻辑了。也就是说,主程序类写好了以后,我们无需过多的配置,以前怎么编写业务逻辑,将来还怎么编写业务逻辑。
编写业务
我们依旧还是在
com.meimeixia.boot包下创建一个Controller,例如HelloController,这不还是Spring MVC的那一套东西吗,你不会连这个都不知道吧😘
由于以上handle01方法返回的结果最终是要以字符串的方式写给浏览器,所以我们会在这个方法上加一个@ResponseBody注解。未来的话,咱们这个处理器(即HelloController)会处理非常多的请求,可能都要给浏览器返回字符串,因此我们就需要把@ResponseBody注解写在类上了,不妨就这样做看看。
package com.meimeixia.boot.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * @author liayun * @create 2021-04-19 4:24 */ @Controller @ResponseBody public class HelloController { @RequestMapping("/hello") public String handle01() { return "Hello, Spring Boot 2!"; } }
这就表示咱们这个处理器(即HelloController)中的每一个方法,返回的结果都是直接写给浏览器,而不是跳转到某个页面中去了。但是,你不觉得在类上老是标注@Controller和@ResponseBody这两个注解太麻烦了吗?其实,Spring MVC里面有一个新注解,叫@RestController,大家不妨点进去看一下它的源码,会发现它其实就是@Controller和@ResponseBody这两个注解的合体,如下图所示。
所以,现在我们可以用@RestController注解来代替@Controller和@ResponseBody这两个注解了,如下所示。
package com.meimeixia.boot.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** * @author liayun * @create 2021-04-19 4:24 */ @RestController public class HelloController { @RequestMapping("/hello") public String handle01() { return "Hello, Spring Boot 2!"; } }
测试
那我们怎么来运行我们写的这个Spring Boot应用呢?很简单,只需要来到我们的主程序类里面,运行main方法即可。要是搁以前的话,我们还得在IDEA里边整合Tomcat服务器,然后整一大堆,才能运行,而现在我们直接运行主程序类中的main方法就行了。这时,我们会看到IDEA控制台有内容输出,输出的是一些日志信息,如下图所示。
看到
Tomcat started on port(s): 8080 ...这样的信息没?这是告诉我们Tomcat服务器已经在8080端口启动了,那不妨我们通过浏览器访问一下
http://localhost:8080/hello该url,回车之后,你会发现服务器确实给我们响应了,如下图所示。
使用Spring Boot之后,是不是简化了我们的开发啊?现在基本上省略了很多我们以前的配置,包括连Tomcat服务器我们都不用安装了,直接运行主程序类中的main方法就行,而且我们现在也都测试成功了。当然了,Spring Boot更强大之处还在于能简化我们的配置,使用Spring Boot之后,只要写完主程序类,我们就可以直接编写咱们的业务了。
至此,咱们的第一个Spring Boot的Hello World入门程序就算是写好了,是不是很简单啊😘
简化配置
Spring Boot是怎么简化配置的呢?我们以前想要更改Tomcat服务器的端口号,还得打开Tomcat服务器配置文件来修改,而现在就不需要了。因为Spring Boot是一个来整合其他所有东西的总框架,所以Spring Boot为了简化我们的配置,会将未来我们所有的配置都抽取在一个配置文件里面,这个配置文件的固定名字就叫做
application.properties。在该配置文件里面,我们什么都可以修改,包括可以修改Tomcat服务器的一些设置、Spring MVC的一些设置等等。
那不妨我们就在
src > main > resources目录下新建
application.properties这样一个配置文件,并在其里面更改Tomcat服务器启动的端口号为8888,如下图所示。
于是,我们再来启动一下我们这个Spring Boot应用,来看一下效果,如下图所示,从IDEA控制台输出的日志信息中可以看到,现在Tomcat服务器确实已经在8888端口启动了。
如果我们现在还是在浏览器中访问8080端口,那就有问题了,所以我们必须来访问8888端口,如下图所示。
从以上得知,Spring Boot给我们专门准备了一个统一的配置文件,所有的配置你都可以在这儿更改。如果我们不进行更改配置的话,其实Spring Boot也是有其默认的配置的。那么,我们到底能在咱们的Spring Boot应用中写上哪些配置呢?要想知道该问题的答案,我们就不得不参照Spring Boot的官方文档了。来到Spring Boot官方文档的索引页面,如下图所示。
在以上索引页面的底部,你会发现有
Application Properties这样的一个章节,之前我也为大家介绍过。
在这一章节中,就指明了我们到底能在咱们的Spring Boot应用中写哪些配置,如下图所示。
可以看到,所有的配置列表全部在这都有展示,例如我们可以来搜一下上面写的
server.port配置,发现该配置是位于
11. Server Properties这一小节中,该小节罗列出来的都是有关服务器的配置。
如果你还想要配置与Spring MVC有关的一些东西,那么不妨看看
9. Web Properties这一小节,该小节罗列出来的都是有关Web开发的配置。
所以,未来当你使用Spring Boot来开发应用的时候,配置不会写了,那就可以来参照Spring Boot官方文档中的
Application Properties这一章节里面的内容了。在这一章节中,列举出了每一个配置项的名字叫什么,以及该配置的默认值是什么,包括该配置到底是用来干什么的,都说的很清楚了,在我们后续不断的深入学习中,我们是肯定会来配置
application.properties这个配置文件的。
至此,你应该能得出这样一个结论了吧😊,就是Spring Boot给我们做了非常多的简化,只需要在配置文件这一处进行修改,就能修改我们整个应用的所有配置了。
简化部署
Spring Boot也能简化部署哟!如果要是搁以前的话,我们开发了一个应用,想要将其部署到目标服务器上,那么我们目标服务器是不是还得装Tomcat服务器等等一大堆啊,而且还得把咱们的应用打成war包,然后再把这个war包部署到Tomcat服务器上,你不觉得这样一套流程下来很麻烦吗?当然了,由于目前我们这个maven工程没有写打包方式,所以默认其打包方式就是jar了。
那有了Spring Boot之后,又该怎么做呢?我们不妨继续来参考一下Spring Boot官方文档中的
Getting Started这一章节里面的内容,来到
4.5. Creating an Executable Jar这一小节下,它说如果我们想要简化部署,那么我们得创建一个可执行的jar包。
也就是说,只要引入了Spring Boot给我们提供的如下这个插件,我们就可以把maven工程直接打成一个jar包了,这个jar包里面自带了我们整套的运行环境,而且该jar我们一般称为
fat jar,意思是说它很胖,因为它里面什么东西都有。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
正是由于打包成的jar包里面自带了我们整套的运行环境,所以我们就能直接运行了。不妨将以上插件复制到咱们maven工程的pom.xml文件里面,然后再来测试一下。
接下来,我们就要将咱们的maven工程打包成jar了,那怎么做到这一点呢?首先,打开Maven视图,并选中咱们的maven工程,然后展开其下面的Lifecycle目录,接着依次选中
clean和
package这两生命周期,紧接着点击以下红圈圈中的那个绿色小三角形。
当IDEA控制台打印出如下信息之后,就代表打包成功了。
而且,从IDEA控制台打印出的信息中,我们也可以知道打成的jar包到底是生成到了哪个位置,例如,笔者打成的jar包是生成在了
C:\Users\{当前用户}\Desktop\boot-01-helloworld\target目录下,我们不妨进到该目录下,发现确实是生成了一个jar包,即
boot-01-helloworld-1.0-SNAPSHOT.jar。
其实,还有一种方式可以找到该jar包的位置,操作步骤如下图所示。
这时,会找到target目录所在的位置,如下图所示。
然后,进入target目录里面,你照样能看到生成的jar包。
而且,这个jar包我们可以直接来执行,下面我来给大家测试一下。首先,进入CMD命令行窗口中,并切换到
C:\Users\{当前用户}\Desktop\boot-01-helloworld\target目录下,然后使用
dir命令确认一下该目录下是否有生成的jar包,若确实有则使用
java -jar xxx.jar命令直接运行该jar包,这时,你就会发现当前的Spring Boot应用正在启动,不一会儿,你就能看到当前的Spring Boot应用已经在8888端口启动起来了,如下图所示。
接着,我们再在浏览器中访问一下8888端口,你依旧能看到如下图所示的效果。
所以,你现在终于知道Spring Boot也能简化我们的部署了吧!可见,Spring Boot有多么的强大,从开发到配置,再到部署,都给我们做了简化。
如果你想在CMD命令行窗口以
java -jar xxx.jar这样子的命令直接成功运行生成的jar包,那么你得注意如下几点。
注意点一
第一个注意点是大家一定要在IDEA中将当前的Spring Boot应用停掉。
注意点二
好多同学在CMD命令行窗口以
java -jar xxx.jar命令直接运行生成的jar包时,发现Spring Boot应用老是起不起来,原因可能是因为你的CMD命令行窗口启用了快速编辑模式。不信的话,你就打开你的CMD命令行窗口的属性对话框看一下,极有可能你勾选了CMD命令行窗口的快速编辑模式,如下图所示。
如果你真的启用了快速编辑模式,当Spring Boot应用正在启动的时候,你的鼠标要是在CMD命令行窗口随便点一下,那么Spring Boot应用就会卡住不动了,这当然就起不起来了。所以,大家一定要取消掉CMD命令行窗口的快速编辑模式,这样,你的Spring Boot应用才能在CMD命令行窗口以控制台的方式正常启动。
注意点三
有可能很多同学第一次使用Spring Boot时,会遇到这样一个问题,由于要下载大量依赖嘛,有可能这些依赖还没有下载下来,所以启动主程序时老是报缺少哪些类这样的错误。想要解决该问题,第一你得把网络设置好,第二在Maven视图中选中你的maven工程,然后点一下那个刷新小图标,如下图所示,这样所有的依赖就会重新来进行下载了。
大家第一次来使用Spring Boot时,一定要耐心等待哟😀,因为第一次需要下载的jar包非常多。
以上就是我们的第一个Spring Boot的Hello World入门程序,大家是不是感觉到Spring Boot的强大了呢?而且最终Spring Boot也给我们打了一个jar包,上面说过,这个jar包里面所有的环境都有,我们不妨用压缩软件把它打开看一下,打开之后,你会看到有一个
BOOT-INF目录,再打开
BOOT-INF目录,会看到它里面还有一个
lib目录,再打开
lib目录,你会发现它里面有非常多的jar包,其中就有
tomcat-embed-core-9.0.45.jar这样的一个jar包,如下图所示。
也就是说,Spring Boot帮我们打成的jar包里面已经自带了Tomcat服务器环境。当然了,
lib目录下还有一些我们依赖的第三方jar包。
那我们自己写的程序是在哪呢?就在
BOOT-INF\classes目录下,如下图所示,是不是还能看到我们自己写的配置文件啊?
这就是Spring Boot,从开发到配置,再到最终的部署、上线运维,都给我们带来了极大的方便。
- SpringBoot实战之基础入门(一)
- Spring Boot(1)入门篇 - Hello World
- 2019最新Spring Boot从入门到实战 基础实战系列教程全集
- SpringBoot入门系列:第二篇 再学Hello World
- Spring boot入门二 基础参数配置
- Spring Boot 入门之基础篇(一)
- Spring基础:快速入门spring boot(3):创建Restful的Web服务
- Spring Boot 入门小目标 1 --- 先来试着写个 Hello World
- 零基础快速入门SpringBoot2.0教程 (三)
- SpringBoot(一) 基础入门
- 0基础学习Springboot之Hello World
- Spring Boot基础之Hello World
- Spring Boot 入门之基础篇(一)
- 零基础快速入门SpringBoot2.0教程 (二)
- Spring Boot入门之Hello world!
- spring boot 入门(一):IntelliJ IDEA 实现hello world
- SpringBoot入门系列:第一篇 Hello World
- spring boot快速入门搭建输出hello world
- 零基础快速入门SpringBoot2.0 (一)
- spring boot 基础入门学习-新建spring boot工程