让我们提高开发效率,尝试使用Spring Boot 1.3里的开发工具吧

首先

在Spring Boot 1.3版本中,引入了一个名为spring-boot-devtools的开发辅助模块。
我写了一个粗略的翻译和个人感想,关于该模块的概述(Spring Boot 1.3中的DevTools)。
(在部分内容中,我根据参考指南的描述进行了一些补充说明)

Spring Boot 1.3 中的 DevTools

在Spring Boot 1.3中,将能够使用一个方便的开发工具模块叫做spring-boot-devtools!要使用它,需要添加依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>
dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}

有点简短的前言

以下的描述中提到了“在开发阶段将会自动执行○○”,但是“开发阶段 ≠ 生产环境”的判断将会根据应用程序的启动方式自动判断。
具体来说,如果是通过java -jar启动或者使用了其他特殊的类加载器,将会被视为“生产环境”。

物业默认值

在使用Spring Boot 1.2版本的时候,你可能知道可以通过spring.thymeleaf.cache的配置将模板的缓存关闭。
这种配置虽然方便,但是在开发中,总是要时刻关注缓存的开启或关闭真的很烦人。
因此,在开发阶段,我们已经将模板引擎(Thymeleaf、Freemarker、Groovy Templates、Velocity、还有Mustache)的缓存默认关闭了。

自动重启

我认为使用JRebel或Spring Loaded的人应该知道,自动重新加载功能很方便。
但是如果想要使用这些工具,就必须调整IDE的设置,而且有些工具可能还需要付费!

这些“即时重新加载”技术稍微慢一些,但我使它们能够做类似的事情。
如果包含spring-boot-devtools,那么它会捕捉类路径上的所有文件,如果文件有更改,它将自动重新启动应用程序。

填补

默认情况下,即使Thymeleaf模板、css、js等不需要重新编译的静态文件发生更改,自动重启也不会执行(因为根本不需要重新启动)。但是,它可以作为接下来要讨论的LiveReload的触发器。为了将其排除在自动重启的触发器范围之外,可以使用以下属性。

spring.devtools.restart.exclude

デフォルトの例外対象を無視して、完全に例外を指定しなおす場合に利用

e.g. spring.devtools.restart.exclude=static/**,public/**

spring.devtools.restart.additional-exclude

デフォルトの例外対象(/resourceや/staticなど)はそのままに、例外対象を追加する場合に利用

如果您想将classpath之外的文件设为自动重启的目标,您可以在spring.devtools.restart.additional-paths属性中进行指定。

实时重新加载

为了将”cache properties”和”automatic restarts”的操作反映在屏幕上,需要在浏览器中点击刷新按钮,很麻烦对吧。
如果使用LiveReload功能,它会自动通知浏览器进行刷新,这样应用程序重新启动后浏览器会自动更新!
为此,可以免费从livereload.com安装浏览器扩展。
(Chrome、Firefox、Safari都支持)

填补

LiveReload的功能只对一个应用程序有效。例如,如果同时启动了多个应用程序,则只有最先启动的一个应用程序才会被LiveReload支持。

远程调试隧道

我猜你可能有使用过Docker或Lattice,但调试真的很麻烦吧。
为了进行远程调试,还需要加上-Xdebug选项,并将它正确地转发到适当的端口……这些配置也是必须要做的。

在Spring Boot 1.3中,通过使用Java调试线协议(JDWP),即使服务器上只有80和443端口可用,也可以通过简单的配置进行远程调试。

远程更新和重新启动

不仅可以远程调试,还可以远程更新和重新启动正在运行的应用程序!换句话说,当在本地更改文件时,这些更改会反映在远程服务器的应用程序中。

補充

这个功能默认是被禁用的。
为了使用它,需要设置spring.devtools.remote.secret。

假设我正在将名为my-app的服务部署到Cloud Foundry平台上的https://myapp.cfapps.io,其配置步骤如下。

    1. 将spring.devtools.remote.secret的值设置在my-app的application.properties文件中进行部署。

(该值仅用于Local和Remote的匹配,因此可以是任何值。)

在IDE的Run Configuration中,将main class指定为org.springframework.boot.devtools.RemoteSpringApplication。

在Program arguments中指定https://myapp.cfapps.io。

如果使用这个设置来启动,将会得到如下的控制台输出。

  .   ____          _                                              __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _          ___               _      \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` |        | _ \___ _ __  ___| |_ ___ \ \ \ \
 \\/  ___)| |_)| | | | | || (_| []::::::[]   / -_) '  \/ _ \  _/ -_) ) ) ) )
  '  |____| .__|_| |_|_| |_\__, |        |_|_\___|_|_|_\___/\__\___|/ / / /
 =========|_|==============|___/===================================/_/_/_/
 :: Spring Boot Remote :: 1.3.0.BUILD-SNAPSHOT

2015-06-10 18:25:06.632  INFO 14938 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Starting RemoteSpringApplication on pwmbp with PID 14938 (/Users/pwebb/projects/spring-boot/code/spring-boot-devtools/target/classes started by pwebb in /Users/pwebb/projects/spring-boot/code/spring-boot-samples/spring-boot-sample-devtools)
2015-06-10 18:25:06.671  INFO 14938 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2a17b7b6: startup date [Wed Jun 10 18:25:06 PDT 2015]; root of context hierarchy
2015-06-10 18:25:07.043  WARN 14938 --- [           main] o.s.b.d.r.c.RemoteClientConfiguration    : The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2015-06-10 18:25:07.074  INFO 14938 --- [           main] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2015-06-10 18:25:07.130  INFO 14938 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Started RemoteSpringApplication in 0.74 seconds (JVM running for 1.105)

视频预览

请参考手册了解更详细的信息。另外,我也准备了视频。Spring Boot 1.3中的DevTools(演示)。

所感 (suǒ

遠隔更新和重啟功能非常強大。
這使得可以在遠程操作的情況下,更新系統並重新啟動。

写代码→编译→部署(将文件放置并启动)→在浏览器中更新

这项工作

编写代码 → 自动在浏览器中实时显示

只要专注于编码,就好像只需要编码一样,似乎可以带到这种状态。

文献引用

开始使用Spring Boot 1.3与DevTools
Spring Boot 1.3 新闻 #渋谷Java

广告
将在 10 秒后关闭
bannerAds