# 实验一_使用Spring Boot构建应用程序 **Repository Path**: cs_xiao/springboot-exp01 ## Basic Information - **Project Name**: 实验一_使用Spring Boot构建应用程序 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-10 - **Last Updated**: 2021-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## **课程名称** :企业级开发框架实践 **实验名称**:使用Spring Boot构建应用程序 **实验序号**:一 **姓名**:陈旭孝 **学号**:201841413103 **班级**:18网工1班 **实验地址**:学校 **实验日期**:2020-10-6 **指导老师**:黎志雄 **实验成绩**:XXX **百分制**:XXX **同组同学**:无 **教师评语**:XXX XXX ### 实验一 使用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文件 #### 二、实验环境 1. JDK 1.8或更高版本 2. Maven 3.6+ 3. IntelliJ IDEA #### 三、实验任务 1. **通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目** 1. ![image-20201005214635883](README.assets/image-20201005214635883.png) 2. ![image-20201006172110881](README.assets/image-20201006172110881.png) 2. **添加两个功能模块:spring MVC、lombok;** 1. ![image-20201005214535370](README.assets/image-20201005214535370.png) 3. **添加阿里云镜像仓库作为项目maven仓库;** 1. ```xml aliyunmaven_public * 阿里云公共仓库 https://maven.aliyun.com/repository/public aliyunmaven_central * 阿里云中央仓库 https://maven.aliyun.com/repository/central ``` 4. **解释项目pom.xml文件中主要标签的意义;** 3. ```xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE com.xuxiao springboot-exp01 0.0.1-SNAPSHOT springboot-exp01 Demo project for Spring Boot 11 org.springframework.boot spring-boot-starter-web com.fasterxml.jackson.core jackson-databind com.google.code.gson gson org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-maven-plugin ``` 5. **配置jetty或undertow作为Spring Boot应用程序的默认Servlet容器** 1. ![image-20201005214427676](README.assets/image-20201005214427676.png) 2. ![image-20201005214440141](README.assets/image-20201005214440141.png) 6. **配置Gson作为Spring Boot应用程序的默认JSON MessageConverter;(可选)** 1. ![image-20201006172809080](README.assets/image-20201006172809080.png) 2. ![image-20201009010202864](README.assets/image-20201009010202864.png) 3. ```java //实体类 @Data @AllArgsConstructor @NoArgsConstructor public class User { String username; int userAge; Date birthday; } //controller @Controller public class GsonController { @ResponseBody @RequestMapping(value = "/gson") public static User gsonTest(){ return new User("xuxiao",21,new Date()); } } ``` 4. ![](README.assets/image-20201010102526130.png) 7. **修改Spring Boot应用程序启动时的Banner;(新增-2020-10-5)** 1. ![image-20201008173706878](README.assets/image-20201008173706878.png) 8. **添加一个简单的Spring Mvc控制器组件** 1. ```java package com.xuxiao.springbootexp01.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @ResponseBody @RequestMapping("/hello") public static String hello(){ return "hello"; } } ``` 9. **定义一个CommandLineRunner的Bean,用于检查Spring Boot应用程序启动完成后在Spring IoC容器中注册的所有Bean。** 1. ![image-20201009214223746](README.assets/image-20201009214223746.png) 2. ![image-20201009214234320](README.assets/image-20201009214234320.png) 3. ![image-20201009214306049](README.assets/image-20201009214306049.png) 4. ![image-20201009214319867](README.assets/image-20201009214319867.png) 10. **编写一个简单的单完测试。** 1. ​ ![image-20201010215021239](README.assets/image-20201010215021239.png) 2. ![image-20201010215959719](README.assets/image-20201010215959719.png) 3. > **说明:** > > MockMvc来自Spring Test模块,它可以让您通过一组便捷的构建器类将HTTP请求发送到DispatcherServlet中,并对结果进行断言。 > > 注意,这里使用@AutoConfigureMockMvc和@SpringBootTest。 > > **1)@SpringBootTes**t > > 使用完@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的单元测试教程](https://spring.io/guides/gs/testing-web/) 11. **使用IntelliJ IDEA的HTTP Client工具测试控制器端口;** 1. ![image-20201009221521649](README.assets/image-20201009221521649.png) 12. **在命令行中使用spring官方提供的mave插件 spring-boot 运行Spring Boot应用程序,并把嵌入式Servlet容器的默认端口8080改为9090;** 1. `9090端口被占用,下面改用8090端口` 2. `mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8090` 3. ![image-20201010112746438](README.assets/image-20201010112746438.png) 4. ![image-20201010102948906](README.assets/image-20201010102948906.png) 5. ![image-20201010103500437](README.assets/image-20201010103500437.png) 13. **在属性文件中配置Spring Boot应用程序以debug模式运行。** 1. ![image-20201010104310467](README.assets/image-20201010104310467.png) 2. ![image-20201010104522315](README.assets/image-20201010104522315.png) 3. ![image-20201010105416324](README.assets/image-20201010105416324.png) 14. **在命令行中编译、打包Spring Boot应用程序。** 1. `mvn install` 2. ![image-20201010104852907](README.assets/image-20201010104852907.png) 15. **在命令行中使用java命令运行Spring Boot应用程序的Jar文件。** 1. ![image-20201010105416324](README.assets/image-20201010105416324.png) 16. **在命令行中使用java命令运行Spring Boot应用程序的Jar文件,带参数改变嵌入式Servlet容器的默认端口8080改为9090** 1. ![image-20201010112427857](README.assets/image-20201010112427857.png) 2. ![image-20201010112511518](README.assets/image-20201010112511518.png) 17. **使用markdown标记语方编写实验报告,并生成README.md文件放在项目仓库的根目录。**