开发Spring Boot应用
Spring Boot在刚刚公开宣布之后就将一个样例发布到了Twitter上,它目前成为了最流行的一个应用样例。它的全部描述如程序清单1.2所示,一个非常简单的Groovy文件可以生成功能强大的以Spring为后端的web应用。
程序清单1.2
/**
* @author ChenYanwei
* @version 1.0
*/
@RestController
class App {
@RequestMapping("/")
String home() {
"hello"
}
}
这个应用可以通过spring run App.groovy命令在Spring Boot CLI中运行。Boot会分析文件并根据各种“编译器自动配置(compiler auto-configuration)”标示符来确定其意图是生成Web应用。然后,它会在一个嵌入式的Tomcat中启动Spring应用上下文,并且使用默认的8080端口。打开浏览器并导航到给定的URL,随后将会加载一个页面并展现简单的文本响应:“hello”。提供默认应用上下文以及嵌入式容器的这些过程,能够让开发人员更加关注于开发应用以及业务逻辑,从而不用再关心繁琐的样板式配置。
Boot能够自动确定类所需的功能,这一点使其成为了强大的快速应用开发工具。当应用在Boot CLI中执行时,它们在使用内部的Groovy编译器进行构建,这个编译器可以在字节码生成的时候以编码的方式探查并修改类。通过这种方式,使用CLI的开发人员不仅可以省去定义默认配置,在一定程度上甚至可以不用定义特定的导入语句,它们可以在编译的过程中识别出来并自动进行添加。除此之外,当应用在CLI中运行时,Groovy内置的依赖管理器,“Grape”,将会解析编译期和运行时的类路径依赖,与Boot编译器的自动配置机制类似。这种方式不仅使得框架更加对用户友好,而且能够让不同版本的Spring Boot与特定版本的来自于Spring IO平台的库相匹配,这样一来开发人员就不用关心如何管理复杂的依赖图和版本结构了。另外,它还有助于快速原型的开发并生成概念原型的工程代码。
对于不是使用CLI构建的工程,Boot提供了许多的“starter”模块,它们定义了一组依赖,这些依赖能够添加到构建系统之中,从而解析框架及其父平台所需的特定类库。例如,spring-boot-starter-actuator依赖会引入一组基本的Spring项目,从而实现应用的快速配置和即时可用。关于这种依赖,值得强调的一点就是当开发Web应用,尤其是RESTful Web服务的时候,如果包含了spring-boot-starter-web依赖,它就会为你提供启动嵌入式Tomcat容器的自动化配置,并且提供对微服务应用有价值的端点信息,如服务器信息、应用指标(metrics)以及环境详情。除此之外,如果引入spring-boot-starter-security模块的话,actuator会自动配置SpringSecurity,从而为应用提供基本的认证以及其他高级的安全特性。它还会为应用结构引入一个内部的审计框架,这个框架可以用来生成报告或其他的用途,比如开发认证失败的锁定策略。
为了阐述在Java Maven工程中,如何快速地使Spring Web工程准备就绪,考虑一下程序清单1.3中的应用程序代码。
程序清单1.3
package com.infoq.springboot;
import org.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.*;
/**
* @author ChenYanwei
* @version 1.0
*/
@RestController
@EnableAutoConfiguration
public class Application {
@RequestMapping("/")
public Stringhome() {
return"Hello";
}
public staticvoid main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在Application类上的@EnableAutoConfiguration注解会告知Boot要采用一种特定的方式来对应用进行配置。这种方法会将其他样板式的配置均假设为框架默认的约定,因此能够聚焦于如何尽快地使应用准备就绪以便运行起来。Application类是可运行的,因此,当我们以Java Application的方式运行这个类时,就能启动该应用及其嵌入式的容器,这样也能实现即时地开发。
为了发布版本而构建工程时,Boot的Maven和Gradle插件可以嵌入(hook)到这些构建系统的打包过程中,以生成可执行的“胖jar包(fat jar)”,这种jar包含了工程的所有依赖并且能够以可运行jar的方式执行。使用Maven打包Boot应用只需运行mvn package命令,与之类似,使用Gradle时,执行gradle build命令将会在构建的目标地址下生成可运行的jar。