Spring Boot – 为所有人简化 Spring

工程 | Phil Webb | 2013 年 8 月 6 日 | ...

(这篇博文由 Phil WebbDave Syer 共同撰写。)

我们很高兴宣布一个名为 Spring Boot 的新项目的首个里程碑版本发布。

Spring Boot 旨在通过最少的麻烦轻松创建基于 Spring 的生产级应用和服务。它对 Spring 平台采取了一种“有主见”的方式,以便新用户和现有用户都能快速获得所需的功能。您可以使用它创建独立的 Java 应用,这些应用可以使用 'java -jar' 启动,也可以采用更传统的 WAR 部署方式。我们还提供一个命令行工具,用于运行 'spring scripts'。

下图展示了 Spring Boot 作为更广泛 Spring 生态系统中的一个焦点。它为用户提供了一个小的入口,以便他们能够接触 Spring 的其余部分并从中获取价值。

Spring Boot in Context

Spring Boot 的主要目标是:

  • 为所有 Spring 开发提供一个显著更快且易于上手的“快速入门”体验
  • 开箱即用时采取“有主见”的方式,但随着需求与默认设置的差异增大,能快速让开道路
  • 提供一系列常见于各种大型项目的非功能性特性(例如嵌入式服务器、安全性、指标、健康检查、外部化配置)

Spring Boot 生成代码,并且绝对需要 XML 配置。

Spring Scripts

Spring Boot 附带了一个小的命令行应用,可以用来运行 'spring scripts'。Spring scripts 用 Groovy 编写,这意味着您拥有熟悉的 Java 类似语法,而无需编写大量样板代码。我们只需查看您编写脚本的方式就能推断出许多信息。例如,这里有一个简单的 web 应用

@Controller
class ThisWillActuallyRun {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!"
    }

}

当您使用 'spring run webapp.groovy' 运行此应用时,会发生以下几件事:

  • 您的脚本会自动添加常用的 'import' 语句,以节省您的键入时间
  • 我们能识别 @ResponseBody 注解并下载相应的 Spring JAR 包
  • 我们会自动创建您原本需要自己编写的 Spring @Configuration
  • 我们会启动一个嵌入式 servlet 容器,并在端口 8080 处理传入请求

命令行工具能够识别多种不同类型的 Spring 应用,包括 Web、批处理和集成。在 GitHub 仓库中提供了许多示例

使用 Java 的 Spring Boot

您无需使用命令行工具或编写 Groovy 代码即可获得 Spring Boot 的好处。我们也提供一流的 Java 支持。例如,这是使用 Java 编写的同一应用

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

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

除了 import 语句外,此示例与之前的 Groovy 脚本的主要区别在于调用 SpringApplicationmain() 方法以及 @EnableAutoConfiguration 注解。

显然,使用 Java 时,您还需要一个构建系统来编译和打包您的代码。我们提供了许多方便的“starter”POM,您可以配合 MavenGradleAnt+Ivy 使用它们快速获取合适的依赖项。例如,上面的应用只需要对 spring-boot-starter-web 模块的单个依赖项。

我们还提供 Maven 和 Gradle 插件,让您可以打包一个完全独立的“fat jar”,该 jar 可以通过命令行启动

$ java -jar myproject.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::   v0.0.0.BUILD.SNAPSHOT

2013-07-31 00:08:16.117  INFO 56603 --- [           main] o.s.b.s.app.SampleApplication   : Starting SampleApplication v0.1.0 on mycomputer with PID 56603 (/apps/myapp.jar started by pwebb)
2013-07-31 00:08:16.166  INFO 56603 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6e5a8246: startup date [Wed Jul 31 00:08:16 PDT 2013]; root of context hierarchy

生产就绪

Spring Boot 还包含许多有用的特性,这些特性在您将应用部署到生产环境时通常需要。我们可以自动提供 Web 端点,您可以使用它们监控应用健康状况、提供基本指标或分析生产问题(如线程死锁)。我们还提供一个新的 @ConfigurationProperties 注解,您可以使用它来外部化您的应用配置(完全支持 JSR-303 @Valid 注解)。

尝试一下

Spring Boot 0.5.0.M1 现已在 Spring 里程碑仓库中可用。如果您想尝试此博客中的任何示例,请前往 GitHub 项目页面,在那里您可以找到详细说明。我们正在积极寻求早期反馈,请随时 提出问题fork 仓库并提交 pull request。

SpringOne 2GX 2013 即将到来

尽快预订您在 圣克拉拉 SpringOne 大会的位置。这是亲身了解所有最新进展并提供直接反馈的最佳机会。预计今年将有一些重要的新发布。查看最近的博客文章了解我的意思,还有更多内容即将到来!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

提升技能

VMware 提供培训和认证,助您快速提升。

了解更多

获取支持

Tanzu Spring 通过一个简单的订阅提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

近期活动

查看 Spring 社区的所有近期活动。

查看全部