2.1 Spring Boot简介
Spring Boot是由Pivotal团队提供的基于Spring的全新框架,其设计目的是简化Spring应用的搭建和开发过程。该框架遵循“约定大于配置”原则,采用特定的方式进行配置,从而使开发者无须进行大量的XML配置。Spring Boot致力于成为蓬勃发展的快速应用开发领域的领导者。
Spring Boot并不重复“造轮子”,而是在原有Spring框架的基础上进行封装,并且它集成了一些类库,用于简化开发。换句话说,Spring Boot就是一个大容器。
关于Spring Boot,其官网是这样描述的:
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.
从上面的描述中,我们可以了解到,Spring Boot带给了我们全新的应用部署方案,通过它可以很方便地创建独立的、生产级的基于Spring的应用程序。同时,通过Spring平台和第三方库可以轻松构建视图。
其实,Spring Boot默认集成了Tomcat,因此我们可以只编译成jar包,通过Java命令启动应用,大多数Spring Boot应用程序只需要很少的Spring配置。
2.2 第一个Spring Boot工程
本节中,我们将创建第一个Spring Boot工程,读者可以按照下面的步骤进行操作。
(1) 打开IntelliJ IDEA,依次点击File→New→Module,在弹出的对话框中选择Maven,并点击Next按钮,创建一个Maven项目。这里我们在ArtifactId一栏中输入demo-lesson-one,在GroupId一栏中输入com.lynn.boot。创建好工程后,为pom.xml增加以下内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
其中,标签声明了Spring Boot的父项目,版本号定义为2.0.3.RELEASE。我们还可以注意到,标签中声明了spring-boot-starter-web依赖,它提供了对Spring MVC的支持。
(2) 编写应用启动类Application:
package com.lynn.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
Spring Boot的强大之处在于可以直接通过main方法启动Web应用程序。在上述代码中,我们提供了应用程序的入口,通过调用SpringApplication.run()来启动内置Web容器。我们注意到,在Application类中添加了@SpringBootApplication注解,我们将在2.4节中介绍它的作用。
默认情况下,Spring Boot内置了Tomcat。当然,它还支持其他容器,如Jetty。倘若我们要将默认容器改为Jetty,可以将pom.xml文件修改成下面这样:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
在上述代码中,我们通过标签将Tomcat的依赖包移除,并增加了Jetty的依赖包。
(3) 编写控制器以验证Spring Boot框架:
package com.lynn.boot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping(value = "hello")
public String hello(){
return "Hello World!";
}
}
在上述代码中,@RestController注解指示了该类为控制器类,与它对应的注解是 @Controller。@RestController注解相当于 @Controller注解和@ResponseBody注解的结合。@RequestMapping注解的作用是定义一个HTTP请求地址,默认不限制请求方式,可以是GET、POST亦或其他方法,如果要限制请求方法,可以在注解后面增加method属性,如method=RequestMethod.GET表示只有GET请求才能调用该HTTP地址。
上面提到的注解均为Spring MVC注解,我们之所以能够在这里很方便地使用Spring MVC注解,是因为第(1)步的依赖中添加了spring-boot-starter-web依赖,该依赖集成了Spring MVC。
(4) 运行Application类的main方法,并访问localhost:8080/hello,即可看到如图2-1所示的界面。
通过以上示例,我们可以知道:
使用Spring Boot创建一个工程非常简单,既没有XML配置文件,也没有Tomcat,通过几个简单的注解,运行main方法就能启动一个Web应用;
Spring Boot默认内置Tomcat;
Spring Boot用注解代替了烦琐的XML配置。
2.3 使用YAML文件配置属性
在上一节中,我们实现了一个最简单的Web工程,没有创建任何配置文件。当然,Spring Boot的任何配置都可以通过代码实现。为了便于扩展,它引入了PROPERTIES格式和YAML格式 ①的文件,可以在其中定义一些常用属性或自定义属性。
2.3.1 YAML的基本用法
下面我们先来看一下Spring Boot的一般配置,步骤如下。
(1) 在src/main/resources目录下创建一个名为application.yml的配置文件,并编写以下内容:
server:
servlet:
#定义上下文路径
context-path: /demo
#定义工程启动的端口
port: 8081
在上述配置中,我们通过server.servlet.context-path定义了应用的上下文路径为/demo,它的默认值为/,server.port定义应用的启动端口,其默认值为8080,这里设置为8081。
(2) 启动工程并访问localhost:8081/demo/hello,就可以看到如图2-1所示的界面。
① 本书的所有示例都使用了YAML 栺式的配置文件。
在2.2节中,我们启动工程时的监听端口为8080,上下文路径为/,但是我们并没有配置任何信息,那是因为所有配置属性都有默认值,如端口的默认值为8080。
接下来,我们看一下YAML文件的结构,其基本格式为:
key1:
key2:
key3: value
我们将它替换成properties的形式,即key1.key2.key3&