# experiment1 **Repository Path**: yang_zhong_man/experiment1 ## Basic Information - **Project Name**: experiment1 - **Description**: 第一次实验 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 实验一 使用Spring Boot构建应用程序
实验名称 使用Spring Boot构建应用程序 实验序号
姓名 杨忠满 学号 201741404150 班级 17软件工程1班
实验地点 居家 实验日期 2020.3.25 指导老师 黎志雄
教师评语 实验成绩 评阅教师
百分制
同组同学
### 一、 实验目的 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项目; `步骤`:File->new->Project->Spring Initializr->next->填写信息->加入需要的starter->next,如下图所示:
#### 2、 添加两个功能模块:spring MVC、lombok; `步骤`: 1).通过IntelliJ IDEA的Spring Initializr向导创建的Spring Boot项目,在pom.xml文件中已经通过parent标签继承了父项目,父项目中配置了springboot大部分的依赖插件,如下图:
2).在创建Spring Boot项目时即已经默认配置好相关依赖,如下图:
#### 3、 添加阿里云镜像仓库作为项目maven仓库;
#### 4、 解释项目pom.xml文件中主要标签的意义; ``` modelVersion:描述这个POM文件是遵从哪个版本的项目描述符 parent:此项目继承的父工程 groupID:定义了项目属于哪个组 artifactID:当前maven项目在组中的唯一ID version:当前项目的版本号,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本 properties:定义当前项目的maven属性,可以在其他地方引用 dependencies:当前项目所需要的依赖 repositories:指定远程仓库 plugins:当前项目所使用的插件 ``` ##### 5、 配置jetty或undertow作为Spring Boot应用程序的默认Servlet容器;
#### 6、 添加一个简单的Spring Mvc控制器组件,用于测试;
说明: 该类被标记为@RestController,这意味着Spring MVC可以使用它来处理Web请求。@RequestMapping映射‘/’到该类的index()方法。从浏览器调用或在命令行上使用curl时,该方法返回纯文本。那是因为@RestController是复合注解,它将@Controller和@ResponseBody组合在一起,这两个注解会使Spring Mvc处理Web请求返回的是数据而不是视图。 #### 7、 定义一个CommandLineRunner的Bean,用于检查Spring Boot应用程序启动完成后在Spring IoC容器中注册的所有Bean;
说明: Spring Boot应用程序初始化完成后,会自动回调所有CommandLineRunner类型的Bean的run方法。 实验中,我们自定义一个CommandLineRunner,检查由您的应用程序创建或由Spring Boot自动添加的所有bean,并对它们进行排序并打印出来。 #### 8、 编写一个简单的单完测试;
``` 说明: 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。 ``` #### 9、 使用IntelliJ IDEA的HTTP Client工具测试控制器端口;
说明: 在项目目录中生成一个以 .http 为扩展名的文件,IntelliJ IDEA会自动识别为http脚本,然后编写脚本进行调试。 #### 10、 在命令行中使用spring-boot插件运行Spring Boot应用程序,并把嵌入式Servlet容器的默认端口8080改为9090; 命令: mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dserver.port=9090"
#### 11、 在属性文件中配置Spring Boot应用程序以debug模式运行;
说明: 在Debug模式下,Spring Boot在运行时会在终端显示更多的调式信息。 #### 12、 在命令行中编译、打包Spring Boot应用程序。 命令: mvn clean package -DskipTests #### 13、 在命令行中使用java命令运行Spring Boot应用程序的Jar文件。 命令: java -jar demo-shiyan-1-0.0.1-SNAPSHOT.jar
#### 14、 在命令行中使用java命令运行Spring Boot应用程序的Jar文件,带参数改变嵌入式Servlet容器的默认端口8080改为9090。 命令: java -jar demo-shiyan-1-0.0.1-SNAPSHOT.jar --server.port=9090
说明: 带参数运行jar文件,可以改变很多spring boot内置的属性。 例如:改变当前激活的属性文件:spring.profiles.active。 应用场景:部署docker时使用。 #### 15、 使用markdown标记语方编写实验报告,并生成README.md文件放在项目仓库的根目录。