Spring Boot 1.3 中的 DevTools

工程 | Phil Webb | 2015 年 6 月 17 日 | ...

Spring Boot 1.3 将附带一个名为 spring-boot-devtools 的全新模块。该模块旨在改善开发 Spring Boot 应用程序时的开发体验。

要使用该模块,只需在你的 Maven POM 中添加它作为依赖项

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

或你的 Gradle 构建文件

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}

一旦包含 spring-boot-devtools 模块,它就会提供许多我们将在下面介绍的便捷功能(如果您不想阅读文字,可以跳到文章末尾观看简短视频)。

属性默认值

如果您使用过 Spring Boot 1.2 中的 Thymeleaf 等模板技术,您可能熟悉 spring.thymeleaf.cache 等属性。这些属性用于禁用缓存,允许您在不重启应用程序的情况下更新页面。支持这些属性非常方便,但开发过程中记住设置它们一直有些麻烦。

现在,当您使用 spring-boot-devtools 模块时,您不再需要费心去设置这些属性了。在开发过程中,Thymeleaf、Freemarker、Groovy Templates、Velocity 和 Mustache 的缓存都会被自动禁用。

自动重启

您可能过去使用过 JRebel 或 Spring Loaded 等工具来为您的 Java 应用程序提供即时重载。这些工具很棒,但它们通常需要额外的配置或 IDE 插件才能工作(有些甚至需要付费!)。

在 Spring Boot 1.3 中,我们一直在努力开发一种比这些“即时重载”技术稍慢一些的功能,它通过重启您的应用程序来实现。当您包含 spring-boot-devtools 模块时,任何类路径文件的更改都会自动触发应用程序重启。我们做了一些优化以尝试保持重启速度,因此对于许多微服务风格的应用程序来说,这种技术可能已经足够了。

LiveReload

在合理的“缓存属性”和“自动重启”功能都正常工作后,每次有东西发生变化时手动点击浏览器刷新按钮似乎会变得有些乏味。为了拯救您的鼠标按钮,Spring Boot 1.3 DevTools 包含了一个嵌入式的 LiveReload 服务器。LiveReload 是一个简单的协议,允许您的应用程序在文件发生更改时自动触发浏览器刷新。Chrome、Firefox 和 Safari 的浏览器扩展可以从 livereload.com 免费获取。

远程调试隧道

如果您尝试过使用 Docker 托管 Java 应用程序,或者尝试过 Lattice 这样的微型 PaaS,您可能会对调试代码的难度感到沮丧。您需要配置 Java 以 -Xdebug 启动,并以某种方式转发适当的端口,以便您可以附加远程调试器。

为了解决这个问题,Spring Boot 1.3 可以通过 HTTP 直接将 JDWP(Java Debug Wire Protocol)隧道传输到您的应用程序。这甚至可以用于部署在仅公开 80 和 443 端口的 Internet Cloud 提供商上的应用程序(尽管由于 JDWP 是一个非常繁忙的协议,这可能会非常慢)。

远程更新和重启

DevTools 提供的最后一个技巧是支持远程应用程序更新和重启。这通过监视本地类路径的文件更改,并将这些更改推送到远程服务器,然后由该服务器重启来实现。与本地重启一样,您也可以将此功能与 LiveReload 结合使用。

视频预览

本文讨论的所有功能都已在 Spring Boot 1.3.0.M1 中提供,并且可以在参考指南中找到详细的文档。如果您暂时还不准备自己安装这些组件,这里有一个简短的视频展示了它们的工作方式。

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有