Spring
与SpringBoot
SpringBoot
是整合Spring
技术栈的一站式框架
SpringBoot
是简化Spring
技术栈的快速开发脚手架
Spring 能做什么
Spring的生态
https://spring.io/projects/spring-boot
覆盖了:web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理......
Spring Boot简介
Spring Boot
是 Pivotal
团队在 Spring
的基础上提供的一套全新的开源框架,其目的是为了简化 Spring
应用的搭建和开发过程。Spring Boot
去除了大量的 XML
配置文件,简化了复杂的依赖管理。
Spring Boot
具有 Spring
一切优秀特性,Spring
能做的事,Spring Boot
都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot
也成了时下炙手可热的技术。
Spring Boot
集成了大量常用的第三方库配置,Spring Boot
应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box
),大部分的 Spring Boot
应用都只需要非常少量的配置代码(基于 Java
的配置),开发者能够更加专注于业务逻辑。
Spring Boot 是什么
众所周知 Spring
应用需要进行大量的配置,各种 XML
配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring
一度被称为“配置地狱”。
为了简化 Spring
应用的搭建和开发过程,Pivotal
团队在Spring
基础上提供了一套全新的开源的框架,它就是 Spring Boot
。
Spring Boot
具有 Spring
一切优秀特性,Spring
能做的事,Spring Boot
都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot
也成为了时下炙手可热的技术。
Spring Boot
提供了大量开箱即用(out-of-the-box
)的依赖模块,例如 spring-boot-starter-redis
、spring-boot-starter-data-mongodb
和 spring-boot-starter-data-elasticsearch
等。这些依赖模块为 Spring Boot
应用提供了大量的自动配置,使得 Spring Boot
应用只需要非常少量的配置甚至零配置,便可以运行起来,让开发人员从 Spring
的“配置地狱”中解放出来,有更多的精力专注于业务逻辑的开发。
Spring Boot 的特点
Spring Boot
具有以下特点:
1. 独立运行的 Spring
项目
Spring Boot
可以以jar
包的形式独立运行,Spring Boot
项目只需通过命令 java–jar xx.jar
即可运行。
2. 内嵌 Servlet
容器
Spring Boot
使用嵌入式的 Servlet
容器(例如 Tomcat
、Jetty
或者 Undertow
等),应用无需打成 WAR
包 。
3. 提供 starter
简化Maven
配置
Spring Boot
提供了一系列的“starter”
项目对象模型(POMS
)来简化 Maven
配置。
4. 提供了大量的自动配置
Spring Boot
提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。
5. 自带应用监控
Spring Boot
可以对正在运行的项目提供监控。
6. 无代码生成和 xml
配置
Spring Boot
不需要任何 xml
配置即可实现 Spring
的所有配置。
SpringBoot2
快速入门
-
系统要求
- Java 8 & 兼容
java14
. - Maven 3.3+
- idea 2019.1.2
如果你还没配置环境变量请查看:java环境变量配置
关于
Lombok
的介绍:Lombok介绍、使用方法和总结 - 猿人谷 - 博客园 (cnblogs.com) - Java 8 & 兼容
-
选择构建工具 Maven Project、Java、Spring Boot 版本 2.6.2 以及一些工程基本信息,可参考下图所示:
-
点击 GENERATE 下载项目压缩包
-
解压后,使用 Idea 导入项目,File -> New -> Model from Existing Source.. -> 选择解压后的文件夹 -> OK,选择 Maven 一路 Next,OK done!
项目结构介绍
如上图所示,Spring Boot 的基础结构共三个文件:
src/main/java
程序开发以及主程序入口src/main/resources
配置文件src/test/java
测试程序
另外, Spring Boot
建议的目录结果如下:
root package
结构:com.example.myproject
com
+- example
+- myproject
+- Application.java
|
+- model
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- controller
| +- CustomerController.java
|
- 1、
Application.java
建议放到根目录下面,主要用于做一些框架配置 - 2、model 目录主要用于实体与数据访问层(Repository)
- 3、service 层主要是业务类代码
- 4、controller 负责页面访问控制
采用默认配置可以省去很多配置,当然也可以根据自己的喜欢来进行更改
最后,启动 Application main 方法,至此一个 Java 项目搭建好了!
引入web模块
-
pom.xml中添加支持web的模块:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
pom.xml 文件中默认有两个模块:
spring-boot-starter
:核心模块,包括自动配置支持、日志和 YAML,如果引入了spring-boot-starter-web
web 模块可以去掉此配置,因为spring-boot-starter-web
自动依赖了spring-boot-starter
。spring-boot-starter-test
:测试模块,包括 JUnit、Hamcrest、Mockito。
-
编写 Controller 内容
@RestController public class HelloWorldController { @RequestMapping("/hello") public String index() { return "Hello World"; } }
@RestController
的意思就是 Controller 里面的方法都以 json 格式输出,不用再写什么 jackjson 配置的了! -
启动主程序,打开浏览器访问
http://localhost:8080/hello
,就可以看到效果了
单元测试
打开的src/test/
下的测试入口,编写简单的 http
请求来测试;使用 mockmvc
进行,利用MockMvcResultHandlers.print()
打印出执行结果。
package com.example.demo;
import com.example.demo.controller.HelloWorldController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloTests {
private MockMvc mvc;
@Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
}
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Hello World"));
}
}
-
@RunWith(SpringRunner.class)
JUnit运行使用Spring的测试支持。SpringRunner是SpringJUnit4ClassRunner的新名字,这样做的目的
仅仅是为了让名字看起来更简单一点。 -
@SpringBootTest
该注解为SpringApplication创建上下文并支持Spring Boot特性,其
webEnvironment
提供如下配置:Mock
-加载WebApplicationContext并提供Mock Servlet环境,嵌入的Servlet容器不会被启动。RANDOM_PORT
-加载一个EmbeddedWebApplicationContext并提供一个真实的servlet环境。嵌入的Servlet容器将被启动并在一个随机端口上监听。DEFINED_PORT
-加载一个EmbeddedWebApplicationContext并提供一个真实的servlet环境。嵌入的Servlet容器将被启动并在一个默认的端口上监听
(application.properties配置端口或者默认端口8080)。NONE
-使用SpringApplication加载一个ApplicationContext,但是不提供任何的servlet环境。
开发环境的调试
热启动在正常开发项目中已经很常见了吧,虽然平时开发web项目过程中,改动项目启重启总是报错;但springBoot
对调试支持很好,修改之后可以实时生效,需要添加以下的配置:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
该模块在完整的打包环境下运行的时候会被禁用。如果你使用 java -jar
启动应用或者用一个特定的 classloader 启动,它会认为这是一个“生产环境”。