# 实验一_使用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. 
2. 
2. **添加两个功能模块:spring MVC、lombok;**
1. 
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. 
2. 
6. **配置Gson作为Spring Boot应用程序的默认JSON MessageConverter;(可选)**
1. 
2. 
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. 
7. **修改Spring Boot应用程序启动时的Banner;(新增-2020-10-5)**
1. 
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. 
2. 
3. 
4. 
10. **编写一个简单的单完测试。**
1. 
2. 
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. 
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. 
4. 
5. 
13. **在属性文件中配置Spring Boot应用程序以debug模式运行。**
1. 
2. 
3. 
14. **在命令行中编译、打包Spring Boot应用程序。**
1. `mvn install`
2. 
15. **在命令行中使用java命令运行Spring Boot应用程序的Jar文件。**
1. 
16. **在命令行中使用java命令运行Spring Boot应用程序的Jar文件,带参数改变嵌入式Servlet容器的默认端口8080改为9090**
1. 
2. 
17. **使用markdown标记语方编写实验报告,并生成README.md文件放在项目仓库的根目录。**