使用Spring Boot开发应用程序

Spring Boot是一个开发框架,用来快速开发各种应用程序,目前用的最多的主要是后端服务的开发。Spring Boot使用特定的方式对Spring的模板化配置进行了简化,并且集成很多第三方库的默认配置。
默认内置了Tomcat容器并且可以替换为其他容器,无需部署War文件,可以直接打成jar包独立运行。Spring Boot依赖于Spring家族的生态圈,你能想到的功能都应有尽有,总结起来就是:方便和快捷。

一、Spring Boot的主要特点

  1. 可以快速创建一个可独立运行的Spring程序
  2. 默认内置嵌入的Tomcat,不需要打包成War包依赖外部容器部署,可以直接打成jar包独立运行。
  3. 使用Maven或Gradle进行第三方库管理,并且做了简化。通过引入starter拥有Spring的全部功能,开箱即用。
  4. 支持自动配置,对很多第三方库提供默认配置,采用了“默认大于配置”的方式,可以做到零配置。
  5. 使用.yml .properties .xml对项目进行配置,通过不同的文件二级名称可以方便的在生产和开发环境切换。

从我开始使用Spring Boot时已经是1.5.6的版本了,到目前为止Spring Boot已经发布了2.0.2版本。
之前比较忙,没有太多精力去记录,现在使用Spring Boot 2.0版本来记录学习过程。
2.0的版本多了很多新特性,最大的亮点主要是Spring Framework 5.0的响应式编程。
有关Spring Boot 2.0的新特性就不再详细的介绍,可以查阅官方文档。

二、开始使用Spring Boot
使用Spring Boot到底有多简单?

1.使用Gradle来构建一个普通的Java项目

可以看到上面的App类中有一个入口main函数,在函数中打印 “Hello,World!”。点击运行就可以看到输出。
接下来通过引入一个Spring Boot的依赖,实现零配置的Spring程序。

2.在项目的build.gradle文件中加入Spring Boot的web模块依赖

1
compile("org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE")

3.为入口类添加@SpringBootApplication注解,表示这是一个Spring Boot应用程序,然后在main函数中添加SpringApplication.run方法,传入启动类入口参数。

1
2
3
4
5
6
7
@SpringBootApplication
public class App {

public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}

通过以上三个步骤,就可以直接启动Spring Boot程序了。

点击运行,控制台输出了启动日志,其中可以看到一条日志 Tomcat started on port(s): 8080,表示Tomcat启动完毕,默认占用的是8080端口,这是一个内嵌的Tomcat,后续可以高度定制。

为了可以在浏览器中访问到项目,我们需要添加一个控制器,并且提供访问地址和响应数据。
为了方便这里直接在App类中添加,最终的App类如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* Spring Boot示例程序
* @author 蓝士钦
*/
@SpringBootApplication
@Controller
public class App {

public static void main(String[] args) {
SpringApplication.run(App.class,args);
}

@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello, Spring Boot!";
}
}

在类上添加@Controller,表示这个类作为控制器层, 在类中添加一个方法hello,用来返回一个字符串。
方法上的@RequestMapping(“/hello”)注解表示该方法可以响应用户的url请求为/hello。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML。
Spring Boot对@responseBody做了默认的配置,如果返回的是一个用户定义的对象,那么这个对象将会自动被解析成JSON输出。
由于这里是字符串,所以浏览器访问这个方法时将直接输出字符串。
打开浏览器输入 http://localhost:8080/hello

通过简单的3个步骤,就可以将普通的Java项目变成Web项目,通过浏览器可以直接访问到。
如果返回的是用户自定义类型,在方法上面添加@ResponseBody将会以JSON的形式返回

1
2
3
4
5
6
7
8
9
@ResponseBody
@RequestMapping("/info")
public User info(){
User user = new User();
user.setName("蓝士钦");
user.setSex("男");
user.setAge(23);
return user;
}

浏览器访问 http://localhost:8080/info

可以看到Spring Boot 默认为@ResponseBody注解添加了视图转换为JSON,开发人员可以不需要再单独配置,非常方便。
然而Spring Boot的强大之处并不在这里,这才是刚刚开始。

三、使用正确的姿势创建Spring Boot项目

IntelliJ IDEA对Spring Boot的支持非常友好

创建项目时选择Spring Initializ 即可创建Spring Boot项目。

可以选择Maven或者Gradle来构建项目,Spring Boot目前支持Java、Kotlin、Groovy语言,
这里使用Gradle来构建项目,语言选择使用Java。

可以为Spring Boot项目添加第三方依赖,这些库也可以后续手动引入,目前就加一个web模块的依赖。

项目构建好后可以看到如上图所示的结构。Spring Boot模板化了工程目录,无需任何配置就可以直接运行。

src/main模块下默认分为java源代码目录和resources资源目录
src/main/java 用来存放Java代码
resources/static/默认指定用来存放静态资源,比如images、css、js以及html等。
resources/templates/表示模板目录,用来存放html模板,这里的文件资源默认需要通过控制器mvc的方式来访问。
resources/application.properties是项目的配置文件。

Spring Boot默认已经帮我们做了各种配置了,可以根据需要进行单独配置,IDEA强大的静态代码分析功能可以给开发人员很智能的提示

修改了默认端口号为8000,上下文地址为/boot

在resources/static/目录下新建一个index.html,然后启动项目
通过地址 http://localhost:8000/boot/index.html 即可访问到页面

Spring Boot 目前支持Thymeleaf 、Freemarker、Mustache、 Groovy Templates模板引擎。
Spring Boot 很多用于api接口服务的开发,有时候也需要使用模板引擎来做渲染视图。官方不推荐使用jsp来做模板引擎,
官方推荐使用 Thymeleaf来做视图模板引擎,使用前需要在build.gradle中添加Thymeleaf的依赖

1
compile('org.springframework.boot:spring-boot-starter-thymeleaf')

Spring Boot 对Thymeleaf做了默认配置,prefix=classpath:/templates/ suffix=.html

所以我们不需要在配置文件中配置,除非需要定制。
在resources/templates/目录下新建模板页面 helloTpl.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
<h2>这是一个模板页面</h2>
<div>
控制器传过来的值为:

<span th:text="${message}"></span>

</div>
</body>
</html>

Thymeleaf模板引擎有很多便捷强大的表达式,这里只输出一个控制器传过来的message值,具体用法后续的文章再详细介绍。
接下来在控制器中定义一个方法,向页面传值,并且返回一个模板名字名称helloTpl,
Spring Boot会对该模板拼接上前后缀: 控制器方法将会返回 classpath:/templates/helloTpl.html

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 控制器示例
* @author 蓝士钦
*/
@Controller
public class HelloController {

@RequestMapping("/hello")
public String hello(Model model){
model.addAttribute("message","Hello,World!");
return "helloTpl";
}
}

访问页面 http://localhost:8000/boot/hello 就可以看到helloTpl模板被成功渲染输出了。

Spring Boot默认的配置文件为.properties,这种配置其实还不够简洁,现在很流行yml的配置
我们可以把默认的配置文件删除,新建application.yml,Spring Boot在启动时默认会加载该配置文件。
除此之外,我们本地开发的配置和测试服务器以及正式生产服务器肯定是有区别的,
传统的Spring 项目从开发环境到测试环境和生产环境的切换时需要修改配置文件,一般通过注释的方式,这样很容易因为误操作导致配置文件的配置是错误的,Spring Boot为我们考虑到了这一点

为开发(dev)、测试(test)、生产(pro)环境分别建立不同的配置文件,在运行或打包时指定该配置即可。
配置文件名称格式:application-自定义名称.yml

在application.yml中指定加载的为dev,这样项目启动的时候就会加载application-dev.yml中的配置
application.yml

1
2
3
spring:
profiles:
active: dev

在不同的配置文件中为项目设置不同的启动端口,以示区分
application-dev.yml

1
2
3
# 开发环境
server:
port: 8100

application-test.yml

1
2
3
# 测试环境
server:
port: 8200

application-pro.yml

1
2
3
# 生产环境
server:
port: 8080

启动服务,项目加载application-dev.yml的开发环境配置,服务将会运行在8100端口。
http://localhost:8100/info

修改配置文件application.yml 指定为测试环境。

1
2
3
spring:
profiles:
active: test

此时运行项目或者打成jar包运行时,项目将会加载测试环境的配置
用Gradle build项目,将会在lib目录下生成一个jar包

将jar包部署到测试环境,使用java -jar 命令直接运行

1
java -jar spring-boot-0.0.1-SNAPSHOT.jar

可以看到服务加载了测试环境的配置,运行在8200的端口上。

Spring Boot和传统的Spring开发相比,不需要繁琐的框架搭建配置,开发速度上有质的提升。
Spring Boot还可以方便的和Hibernate与Mybatis等框架以及Redis、各种MQ集成,并且有默认的配置。
开发者只需要少量的配置就可以快速使用各种框架来开发,灵活的在不同的环境切换。开发效率得到质的飞跃。

本篇文章记录Spring Boot的基本使用,行云流水的过了一遍,还有很多功能没有记录。
每个功能点都写的不深,也不够详细,只是简单的使用,这里占时从宏观感受上先大致罗列,抽空再好好整理。
后续我会分根据Spring Boot的不同方面,单独编写某个功能的文章来系统的记录Spring Boot的用法。

0%