# project1-ex1 **Repository Path**: diaoniasing/project1-ex1 ## Basic Information - **Project Name**: project1-ex1 - **Description**: 实验一 使用Spring Boot构建应用程序 一、 实验目的 1、 掌握使用IntelliJ IDEA创建Spring Boot应用程序的方法; 2、 了解spring-boot-starter-parent的配置内容; 3、 掌握如何利用Starter扩展Spring Boot应用程序的功能; 4、 掌握如何配置Starter; 5、 掌握如何通过属性文件定制Spring Boot应用程序的初始化参数; 6、 掌握使用Spring Boot编写简单的单元测试; 7、 了解Spring Boot应用程序的Fat Jar文件; 8、 掌握Markdown轻量级标记语言编写README.md文件。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-07 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
东莞理工学院网络空间安全学院

课程名称 :企业级开发框架专题
学期:2020春季 实验名称:使用Spring Boot构建应用程序 实验序号:一 姓名:黄仁欢 学号:201841413111 班级:18网络工程1班 实验地址:宿舍 实验日期:2020-10-4 指导老师:黎志雄 教师评语: 实验成绩: 百分制: 同组同学:
一、实验目的
1、 掌握使用IntelliJ IDEA创建Spring Boot应用程序的方法;
2、 了解spring-boot-starter-parent的配置内容;
3、 掌握如何利用Starter扩展Spring Boot应用程序的功能;
4、 掌握如何配置Starter;
5、 掌握如何通过属性文件定制Spring Boot应用程序的初始化参数;
6、 掌握使用Spring Boot编写简单的单元测试;
7、 了解Spring Boot应用程序的Fat Jar文件;
8、 掌握Markdown轻量级标记语言编写README.md文件。
二、实验环境
1、 JDK 1.8或更高版本
2、 Maven 3.6+
3、 IntelliJ IDEA
三、实验任务
1、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目;
2、 添加两个功能模块:spring MVC、lombok;
3、 添加阿里云镜像仓库作为项目maven仓库;
4、 解释项目pom.xml文件中主要标签的意义;
5、 配置jetty或undertow作为Spring Boot应用程序的默认Servlet容器;
6、 配置Gson作为Spring Boot应用程序的默认JSON MessageConverter;(可选)
7、 修改Spring Boot应用程序启动时的Banner;(新增-2020-10-5)
8、 添加一个简单的Spring Mvc控制器组件,用于测试,如下图:
![](https://images.gitee.com/uploads/images/2020/1011/010646_1c1fc4dc_4796963.png "1.png") 说明: 该类被标记为@RestController,这意味着Spring MVC可以使用它来处理Web请求。@RequestMapping映射‘/’到该类的index()方法。 从浏览器调用或在命令行上使用curl时,该方法返回纯文本。那是因为@RestController是复合注解,它将@Controller和@ResponseBody组合在一起, 这两个注解会使Spring Mvc处理Web请求返回的是数据而不是视图。 9、定义一个CommandLineRunner的Bean,用于检查Spring Boot应用程序启动完成后在Spring IoC容器中注册的所有Bean。如下图: ![](https://images.gitee.com/uploads/images/2020/1010/143629_3bf26e79_6563150.png)
说明:
Spring Boot应用程序初始化完成后,会自动回调所有CommandLineRunner类型的Bean的run方法。 实验中,我们自定义一个CommandLineRunner,检查由您的应用程序创建或由Spring Boot自动添加的所有bean,并对它们进行排序并打印出来。
10、编写一个简单的单完测试。如下图:
![](https://images.gitee.com/uploads/images/2020/1010/143636_ff2b6584_6563150.png)
说明:
MockMvc来自Spring Test模块,它可以让您通过一组便捷的构建器类将HTTP请求发送到DispatcherServlet中,并对结果进行断言。 注意,这里使用@AutoConfigureMockMvc和@SpringBootTest。
1)@SpringBootTest
使用完@SpringBootTest后,将创建整个应用程序上下文(加载所有配置类的Bean)。 @SpringBootTest注解告诉SpringBoot去寻找一个主配置类(例如带有@SpringBootApplication的配置类), 并使用它来启动Spring应用程序上下文。SpringBootTest加载完整的应用程序并注入所有可能的bean,因此速度会很慢。
2)@AutoConfigureMockMvc
Spring在该层处理传入的HTTP请求并将其交给您的控制器。这样,几乎使用了整个堆栈,并且将以与处理真实HTTP请求完全相同的方式调用您的代码, 而无需启动Servlet容器就可以进行测试。使用@AutoConfigureMockMvc注解后,则会在spring应用上下文创建MockMvc实例。 在测试用例中可以注入MockMvc实例模拟http请求,MockMvc实例会把http请求转交相应的controller处理,而且不需要启动tomcat等Servlet容器。
3)@WebMvcTest 与 @MockBean
还有另一种替代方法是使用@WebMvcTest注解,它要求Spring Boot仅创建上下文的Web层(仅实例化controller组件), 其它组件需要自己手动Mock(如:使用@MockBean)。这样就可以大大减少单元测试时初始化Spring上下文时加载的Bean数量, 加快启动、测试Spring应用程序的速度。 与@WebMvcTes功能相类似的还有@DataJpaTest与@JsonTest。
无论使用哪种方法,Spring Boot都会自动尝试查找应用程序的主应用程序类,但是如果您要构建其他内容,则可以覆盖它或缩小它的范围。
推荐阅读:Spring Boot官方基于Web的单元测试教程
11、使用IntelliJ IDEA的HTTP Client工具测试控制器端口;
说明:
在项目目录中生成一个以 .http 为扩展名的文件,IntelliJ IDEA会自动识别为http脚本,然后编写脚本进行调试。 IntelliJ IDEA提供了http脚本的用例,如下图:
![](https://images.gitee.com/uploads/images/2020/1010/143645_e1b2b665_6563150.png)
12、在命令行中使用spring官方提供的mave插件 spring-boot 运行Spring Boot应用程序,并把嵌入式Servlet容器的默认端口8080改为9090;
13、在属性文件中配置Spring Boot应用程序以debug模式运行。 说明: 在Debug模式下,Spring Boot在运行时会在终端显示更多的调式信息。
14、在命令行中编译、打包Spring Boot应用程序。
15、在命令行中使用java命令运行Spring Boot应用程序的Jar文件。
16、在命令行中使用java命令运行Spring Boot应用程序的Jar文件,带参数改变嵌入式Servlet容器的默认端口8080改为9090。
说明:
带参数运行jar文件,可以改变很多spring boot内置的属性。
例如:改变当前激活的属性文件:spring.profiles.active。
应用场景:部署docker时使用。
17、使用markdown标记语方编写实验报告,并生成README.md文件放在项目仓库的根目录。
四、实验结果
1、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目; ![创建Spring Boot项目](https://images.gitee.com/uploads/images/2020/1011/132457_577168fa_4796963.png "创建一个SpringBoot项目.png")
2、 添加两个功能模块:spring MVC、lombok ![添加两个功能模块](https://images.gitee.com/uploads/images/2020/1011/154957_ffea9566_4796963.png "dfb85cc1.png")
3、 添加阿里云镜像仓库作为项目maven仓库;
通过修改maven的配置文件:
![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/155056_837bed9e_4796963.png "添加阿里云镜像仓库作为项目maven仓库;.png")
通过修改pom.xml:
在pom.xml文件中添加以下代码:


aliyunmaven
http://maven.aliyun.com/nexus/content/groups/public/

![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/155528_8114acf8_4796963.png "ZE{[L`QVU5ZCQ9DI1T5$M~G.png")
4、 解释项目pom.xml文件中主要标签的意义; 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE com.example create-springboot-demo 0.0.1-SNAPSHOT create-springboot-demo Demo project for Spring Boot aliyunmaven http://maven.aliyun.com/nexus/content/groups/public/ 1.8 org.springframework.boot spring-boot-starter-undertow 2.3.4.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 org.springframework.boot spring-boot-maven-plugin 2.2.6.RELEASE com.example.createspringbootdemo.CreateSpringbootDemoApplication repackage
5、 配置jetty或undertow作为Spring Boot应用程序的默认Servlet容器; 在pom.xml中添加: org.springframework.boot spring-boot-starter-tomcat ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/163545_db7ea3ef_4796963.png "DJY3QFW9IVZ_FJ$I4CEQGKB.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/163729_cce9832e_4796963.png "把servlet容器改成undertow.png")
6、 配置Gson作为Spring Boot应用程序的默认JSON MessageConverter;(可选)
7、 修改Spring Boot应用程序启动时的Banner;(新增-2020-10-5)
用网页Banner生成器生成DGUT HRH 效果如下: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/163802_0b538ad2_4796963.png "修改banner.png")
8、 添加一个简单的Spring Mvc控制器组件,用于测试,
如图,编写一个controller: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/163818_92d102cd_4796963.png "添加一个简单的Spring Mvc控制器组件,用于测试,如下图.png")
9、定义一个CommandLineRunner的Bean,用于检查Spring Boot应用程序启动完成后在Spring IoC容器中注册的所有Bean。
输出结果: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/164940_923d2427_4796963.png "commandlindrunner.png")
10、编写一个简单的单完测试。
首先运行项目,然后编写如下测试: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/165239_57a63b5b_4796963.png "555JP}HNSF[U8CB)L1Z]DVF.png")
运行结果: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/165051_91feb3f3_4796963.png "编写一个简单的单完测试1.png")
11、使用IntelliJ IDEA的HTTP Client工具测试控制器端口; ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/171948_bf343272_4796963.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/172226_8ad26af8_4796963.png "屏幕截图.png")
12、在命令行中使用spring官方提供的mave插件 spring-boot 运行Spring Boot应用程序,并把嵌入式Servlet容器的默认端口8080改为9090;
输入命令构建项目,生成jar包: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/172419_20c19134_4796963.png "在命令行中使用java命令运行Spring Boot应用程序的Jar文件。.png")
清理成功: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/172444_a7d90f92_4796963.png "在命令行中使用java命令运行Spring 2Boot应用程序的Jar文件.png")
构建成功: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/172453_bfccf621_4796963.png "在命令行中使用java命令运行Spring Boot应用程序的Jar文件。4.png")
13、在属性文件中配置Spring Boot应用程序以debug模式运行。 说明: 在Debug模式下,Spring Boot在运行时会在终端显示更多的调式信息。
使用debug模式启动项目后显示的debug信息: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1011/173827_65a60014_4796963.png "调试信息.png")