Spring Boot 是工具集合
由繁琐的 xml 配置转为 yml
集成了多样化中间件 **-starter
Tomcat 变为内置
官方文档
https://docs.spring.io/spring-boot/docs/current/reference/html/index.html
翻译文档:
https://www.springcloud.cc/spring-boot.html
maven设置
设置镜像与使用 jdk1.8
<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>
</properties>
</profile>
</profiles>
不使用 IDEA 自带 maven,使用自己安装的 maven
创建 maven 项目,打开后选中 enable-auto import, maven 自动导入配置的依赖
真.Hello World
添加依赖
Spring Initializr 中的 pom.xml Spring Boot 依赖
先添加 parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
</parent>
添加 web 依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
编写主程序类
创建主程序文件
MainApplication :
/**
* 主程序类
* 这是一个 SpringBoot 应用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
编写 Controller
创建 HelloController 类
package com.qj.boot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
@RestController:Controller 里面的方法都以 JSON 格式输出,不需要有其他额外的配置;如果改 @Controller 代表直接输出内容到页面。
@RequestMapping(“/hello”) :映射 “/hello” 请求到被注释的方法上处理
启动主程序
单击 运行 main 方法 就可以启动项目了。
最后两行输出以下内容表示运行成功
...
Tomcat started on port(s): 8080 (http) with context path '')
还可以通过另外两种方式启动:
- 在项目路径下,使用命令行运行 mvn spring-boot:run 来启动,其效果与点击 run 一样
- 将项目打包,打包以后以 Jar 包的形式启动
- mvn clean package
- java -jar target /hello-0.0.1-SNAPSHOT.jar
启动成功后打开 http://localhost:8080/hello 即可看见输出的内容
其他配置
配置文件
配置文件固定是 application.properties
创建可执行 jar 包(fat jar)
导入插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
默认为 jar 包
打包:maven 执行 clean;package
在 target 里可以找到 打包好的 jar 包
启动
→ java -jar helloword-1.0-SNAPSHOT.jar
URL传参
只要后端处理请求的方法中存在与参数相同名称的属性,请求过程中 Spring 会自动将参数值赋值到属性中。
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(String name) {
return "Hello World " + name;
}
}
热部署
添加依赖:在 pom.xml 文件中添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
在 plugin 中配置 fork 为 true
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
IDEA:
Perference —> 勾选 Build project automatically
按 cmd + option + shift + / 选择 Registry
最后设置项目更新策略
单元测试
确保依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
IDEA 快速创建测试文件快捷键: cmd + shift + T
MockMVC 进行 Web 测试
MockMVC 内置了很多工具类和方法,可以模拟 post、get 请求,并且判断返回的结果是否正确等,也可以利用 print() 打印执行结果。
package com.ylq.demo.web;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
// print() 等 MockMvcResultHandlers 类的静态方法需要导入
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class HelloControllerTest {
private MockMvc mockMvc;
@BeforeEach
void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
void hello() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/hello?name=ylq")
.accept(MediaType.APPLICATION_JSON)).andDo(print());
}
}
@SpringBootTest 系统会自动加载 Spring Boot 容器。
在日常测试中可以注入 Bean 来做一些局部业务测试。
@BeforeEach 表示在测试启动的时候优先执行,一般做资源初始化
使用 print() 方法会把具体过程打印出来
MockHttpServletRequest:
HTTP Method = POST
Request URI = /hello
Parameters = {name=[ylq]}
Headers = [Accept:"application/json"]
Body = <no character encoding set>
Session Attrs = {}
。。。
MockHttpServletResponse:
Status = 200
Error message = null
Headers = [Content-Type:"application/json;charset=ISO-8859-1", Content-Length:"16"]
Content type = application/json;charset=ISO-8859-1
Body = Hello World ylq
Forwarded URL = null
Redirected URL = null
Cookies = []
从 Response 的 Body 中可以看出请求成功
除了 print() 还有 判断返回值方法
@Test
void hello() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/hello?name=ylq")
.accept(MediaType.APPLICATION_JSON))/*.andDo(print()*/
.andExpect(MockMvcResultMatchers.content().string(Matchers.containsString("Hello")));
}
如果执行成功说明测试没有问题,如果错误会抛异常