Spring Boot 来自于 Spring 大家族,是 Spring 官方团队(Pivotal 团队)提供的全新框架,它的诞生解决了 Spring 框架使用较为繁琐的问题。Spring Boot 的核心思想是约定优于配置,让开发人员不需要配置任何 XML 文件,就可以像 Maven 整合 Jar 包一样,整合并使用所有框架。
Spring Boot 特性
Spring Boot 2 对系统环境的要求
Spring Boot 使用
在开始之前,我们先来创建一个Spring Boot 项目。Spring Boot 有两种快速创建的方式:Spring 官网在线网站创建和 IntelliJ IDEA 的 Spring Initializr 创建,下面分别来看。
创建 Spring Boot 项目
1.在线网站创建
在浏览器输入 https://start.spring.io,页面打开如下图所示:
填写相应的项目信息,选择对应的 Spring Boot 和 Java 版本点击 “Generate the project”按钮下载项目压缩文件,解压后用 IDEA 打开即可。
其中 Group 和 Artifact 是 Maven 项目用来确认依赖项目的标识,比如:
org.springframework
spring-core
4.1.6.RELEASE
Group 对应的是配置文件的 groupId,相当于项目的包名;而 Artifact 对应的是配置文件的 artifactId,相当于项目名。
2.使用 IntelliJ IDEA 创建
① 新建项目 → 选择 Spring Initialzr,如下图所示:
② 点击 Next 按钮,填写对应的项目信息(和在线网站创建的字段基本相同),如下图所示:
③ 点击 Next 按钮,选择相应的依赖信息,如下图所示:
④ 点击 Next 按钮,选择项目保存的路径,点击 Finish 创建项目完成,如下图所示:
创建一个 Web 应用
1.pom.xml 中添加 Web 模块的依赖,如下所示:
org.springframework.boot
spring-boot-starter-web
2.创建后台代码
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/index")
public String index(String name) {
return "Hello, " + name;
}
}
3.启动并访问项目
项目的启动类是标识了 @Spring BootApplication 的类,代码如下所示:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootlearningApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootlearningApplication.class, args);
}
}
启动并访问 http://localhost:8080/index?name=laowang 效果如下:
设置配置文件
Spring Boot 的配置文件,是 resources 目录下 application.properties 文件,如下图所示:
可以在配置文件中设置很多关于 Spring 框架的配置,格式如下配置所示:
# 项目运行端口
server.port=8086
# 请求编码格式
server.tomcat.uri-encoding=UTF-8
Spring Boot 发布
Spring Boot 项目的发布方式有两种:
内置容器运行
1.打包应用
使用窗口命令,在 pom.xml 同级目录下:
mvn clean package -Dmaven.test.skip=true
Dmaven.test.skip=true 表示不执行测试用例,也不编译测试用例类。
2.启动应用
后台启动 Java 程序, 命令如下:
nohup java -jar springbootlearning-0.0.1-SNAPSHOT.jar &
停止程序
首先查询 Java 程序的 pid
ps -ef|grep java
再停止程序
kill -9 pid
扩展内容
指定程序运行日志文件
nohup java -jar springbootlearning-0.0.1-SNAPSHOT.jar 1>>logs 2>>errlog &
其中:
外置容器(Tomcat)运行
1.排除内置 Tomcat
org.springframework.boot
spring-boot-starter-tomcat
provided
将 scope 属性设置为 provided,表示打包不会包含此依赖。
2.配置启动类
在项目的启动类中继承 Spring BootServletInitializer 并重写 configure() 方法:
@SpringBootApplication
public class PackageApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(PackageApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(PackageApplication.class, args);
}
}
3.打包应用
使用窗口命令,在 pom.xml 同级目录下:
mvn clean package -Dmaven.test.skip=true
4.部署应用
打包完成会在 target 目录下生成:项目名 + 版本号.war 文件,复制到 Tomcat 的 webapps 目录下,运行 Tomcat 即可。
1.Spring Boot 2.0 支持最低的 JDK 版本是?
A:JDK 6
B:JDK 7
C:JDK 8
D:JDK 9
答:C
2.Spring、Spring Boot、Spring Cloud 是什么关系?
答:它们都是来自于 Spring 大家庭,Spring Boot 是在 Spring 框架的基础上开发而来,让更加方便使用 Spring;Spring Cloud 是依赖于 Spring Boot 而构建的一套微服务治理框架。
3.Spring Boot 项目有哪些优势?
答:Spring Boot 项目优势如下:
4.如何将 Spring Boot 项目打包成 war 包?
答:在 pom.xml 里设置
。
5.在 Maven 项目中如何修改打包名称?
答:在 pom.xml 文件的 build 节点中,添加 finalName 节点并设置为要的名称即可,配置如下:
warName
6.Ant、Maven、Gradle 有什么区别?
答:Ant、Maven、Gradle 是 Java 领域中主要有三大构建工具,它们的区别如下:
Spring Boot 官方支持 Maven 和 Gradle 作为项目构建工具。Gradle 虽然有更好的理念,但是相比 Maven 来讲其行业使用率偏低,并且 Spring Boot 官方默认使用 Maven。
7.Maven 如何设置发布的包名?
答:在 build 节点下设置 finalName 就是发布的包名,如下代码所示:
biapi
8.Spring Boot 热部署有几种方式?
答:Spring Boot 热部署主要有两种方式:Spring Loaded、Spring-boot-devtools。
方式 1:Spring Loaded
在 pom.xml 文件中添加如下依赖:
org.springframework.boot
spring-boot-maven-plugin
org.springframework
springloaded
1.2.6.RELEASE
此处为入口类
方式 2:Spring-boot-devtools
在 pom.xml 文件中添加如下依赖:
org.springframework.boot
spring-boot-devtools
provided
true
9.Spring Boot 2.0 可以在 Tomcat 7 运行吗?为什么?
答:Spring Boot 2.0 无法在 Tomcat 7 上运行。因为 Spring Boot 2.0 使用的是 Spring Framework 5,Spring Framework 5 使用的是 Servlet 3.1,而 Tomcat 7 最高支持到 Servlet 3.0,所以 Spring Boot 2.0 无法在 Tomcat 7 上运行。
10.如何使用 Jetty 代替 Tomcat?
答:在 spring-boot-starter-web 移除现有的依赖项,添加 Jetty 依赖,配置如下:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-jetty
11.Spring Boot 不支持以下哪个内嵌容器?
A:Tomcat
B:Jetty
C:Undertow
D:Nginx
答:D
题目解析:Jetty 容器支持如下:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-jetty
Undertow 容器支持如下:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-undertow
12.Spring Boot 中配置文件有几种格式?
答:Spring Boot 中有 .properties 和 .yml 两种配置文件格式,它们主要的区别是书写格式不同。
.properties 配置文件格式如下:
app.user.name = hellojava
.yml 配置文件格式如下:
app:
user:
name: hellojava
13.项目中有两个配置 application.properties 和 application.yml,以下说法正确的是?
A:application.properties 的内容会被忽略,只会识别 application.yml 的内容。
B:两个配置文件同时有效,有相同配置时,以 application.properties 文件为主。
C:application.yml 的内容会被忽略,只会识别 application.properties 的内容。
D:两个配置文件同时有效,有相同配置时,以 application.yml 文件为主。
答:B
14.RequestMapping 和 GetMapping 有什么不同?
答:RequestMapping 和 GetMapping 区别如下:
15.以下关于 @RestController 和 @Controller 说法正确的?
A:@Controller 返回 JSON 数据
B:@RestController 返回 JSON 数据
C:@APIController 返回 JSON 数据
D:以上都对
答:B
16.Spring Cache 常用的缓存注解有哪些?
答:Spring Cache 常用注解如下:
17.Spring Boot Admin 和 Spring Boot Actuator 的关系是什么?
答:Spring Boot Admin 使用了 Spring Boot Actuator 接口进行 UI 美化封装的监控工具,它以图形化的方式查询单个应用的详细状态,也可以使用 Spring Boot Admin 来监控整个集群的状态。
18.如何理解 Spring Boot 中的 Stater?
答:Stater 可以理解为启动器,它是方便开发者快速集成其他框架到 Spring 中的一种技术。比如,spring-boot-starter-data-jpa 就是把 JPA 快速集成到 Spring 中。
19.常见的 starter 有哪些?
答:常见的 starter 如下:
20.Spring Boot Starter JDBC 和 Spring JDBC 有什么关系?
答:spring-boot-starter-jdbc 是 Spring Boot 针对 JDBC 的使用提供了对应的 Starter 包,在 Spring JDBC 上做了进一步的封装,方便在 Spring Boot 生态中更好的使用 JDBC。
21.Spring Boot 有哪几种读取配置的方式?
答:Spring Boot 可以通过 @Value、@Environment、@ConfigurationProperties 这三种方式来读取。
例如,配置文件内容如下:
app.name=中文
① Value 方式
@Value("${app.name}")
private String appName;
② Environment 方式
public class HelloController {
@Autowired
private Environment environment;
@RequestMapping("/index")
public String index(String hiName) {
// 读取配置文件
String appName = environment.getProperty("app.name");
return "Hello, " + hiName + " |@" + appName;
}
}
③ ConfigurationProperties 方式
@ConfigurationProperties(prefix = "app")
public class HelloController {
// 读取配置文件,必须有 setter 方法
private String name;
public void setName(String name) {
this.name = name;
}
@RequestMapping("/index")
public String index(String hiName) {
System.out.println("appname:" + name);
return "Hello, " + hiName + " |@" + appName;
}
}
22.使用 @Value 读取中文乱码是什么原因?如何处理?
答:这是因为配置文件的编码格式导致的,需要把编码格式设置为 UTF-8,如下图所示: