Spring Boot DevTools使用教程

DevTools通过提供自动重启和LiveReload功能,使您更快、更轻松地开发Spring Boot应用程序。除此之外,它还将各种属性设置为更适合本地开发的值。此外,它允许您远程连接到您的应用程序,并仍然使用其大部分功能。在生产中运行时,不要使用DevTools。 如何使用DevTools进一步加快Spring Boot开发速度?你需要做的就是添加正确的依赖关系,与Spring Boot一样,设置非常简单。 如果您使用Maven:

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

或者,使用Gradle时:

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}
dependencies {
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}

依赖项声明为可选。这个很重要。这可以防止DevTools依赖性传递性地应用于依赖于你项目的其他模块。 自动重启 每当类路径中的文件发生更改时,DevTools会自动重新启动正在运行的应用程序,并应用新的更改。在本地开发时,这可能很有价值,因为您不需要手动重新部署应用程序。 重启仍然需要花费很多时间,你可能认为它不会那么有用,。幸运的是,这些重启比常规重启更快,因为DevTools使用了一个聪明的技巧。 在开发应用程序时,您通常会更改一个或多个类,并希望检查正在运行的应用程序中的结果以获得反馈。您更改应用程序的一小部分,因为大多数加载的类来自框架和第三方库。 ,Spring DevTools使用两个类加载器 - base和restart。base类加载器加载不更改的类。你正在使用的类由restart类加载器加载。每当触发重启时,都会重新启动并重新创建restart的类加载器。这样重新启动应用程序的速度比平常快得多,并且可以使用JRebel等工具作为动态类重新加载的替代方法。 在IDE中触发重新启动 只要类路径发生更改,就会触发重新启动。但是,这取决于您的IDE。这意味着,仅仅更改.java文件是不够的。重要的是您的IDE实际上更新.class了类路径上的文件。 使用IntelliJ IDEA时,您需要构建项目(Ctrl + F9或Build→Build Project)。您还可以将IDEA配置为自动重建。或者,需要打开Spring Boot运行配置并定义触发应用程序更新时发生的情况,Alt + Shift + F10 或F9 进行运行配置,选择编辑配置:

在On Update action中选择Update trigger file,在调用Update操作时触发DevTools的Restart;甚至可以选择尝试热插拔的选项,并仅在热插拔失败时使用DevTools重新启动。 在On frame deactivation中选择Update classes and resources。在IDEA窗口失去焦点时重新加载所有静态资源和模板(例如,切换到浏览器窗口时)。 确认后,修改源码,切换到浏览器,刷新浏览器,可以看到更新后的结果,如果还不行按(Ctrl + F10)强行更新重启。 仅限开发 Spring Boot DevTools的用法仅用于开发,而不用于生产。如果您的应用程序检测到您正在生产中运行,则会自动禁用DevTools。 部署时有两种模式:fully packaged artifact完全打包和exploded artifact ;采取前者打包方式Spring会认为是生产应用;后者认为是开发模式,在Idea等IDE中采取的是后者。 Live Reload LiveReload(http://livereload.com/)是一个有用的工具,它允许您在文件中进行更改时立即在浏览器中更新页面,如HTML,CSS,图像等。它甚至可以根据需要预处理文件 - 这意味着自动编译SASS或LESS文件。 Spring DevTools自动启动LiveReload服务器的本地实例,该服务器监视您的文件。您需要做的就是安装一个浏览器扩展,然后你就可以了。它不仅可用于开发应用程序的前端(如果将其作为Spring应用程序工件的一部分进行分发),还可用于监视和重新加载REST API的输出。 属性覆盖 在本地开发应用程序时,与在生产环境相比通常需要不同的配置。自己管理多组配置是不必要的复杂。好消息是Spring Boot DevTools为您的本地开发配置了许多开箱即用的属性。

spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.groovy.template.cache=false
spring.mustache.cache=false
server.servlet.session.persistent=true
spring.h2.console.enabled=true
spring.resources.cache.period=0
spring.resources.chain.cache=false
spring.template.provider.cache=false
spring.mvc.log-resolved-exception=true
server.servlet.jsp.init-parameters.development=true
spring.reactor.stacktrace-mode.enabled=true

可以检查DevToolsPropertyDefaultsPostProcessor中所有属性的列表。 远程连接 除本地开发外,您还可以连接到运行DevTools的远程应用程序。这不适用于生产环境,因为它可能是一个严重的安全风险。但是,它在预生产环境中非常有用。 默认情况下不启用远程连接。您需要通过修改pom文件显式启用它:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>
    </plugins>
</build>

然后,您需要设置一个密码,以便在连接到远程应用程序时用于身份验证:

spring.devtools.remote.secret=somesecret

远程应用程序运行后,您可以启动远程连接会话,现在,您需要启动org.springframework.boot.devtools.RemoteSpringApplication,使用远程应用程序的URL作为参数启动。请注意,https如果可能,请使用https。 在IDE中轻松运行远程连接。在IDEA中,您只需创建一个新的运行配置。转到Run → Edit Configurations...并创建一个+左上角带有图标的新配置。选择Application类型。

全局配置 可以像使用任何其他Spring应用程序一样使用配置属性配置DevTools。这通常意味着编辑application.properties您的项目。此配置对于每个应用程序是独立的。 但是,在某些情况下,为同一台计算机上运行的所有应用程序进行全局配置可能很方便。您可以创建一个名为.spring-boot-devtools.properties位于$HOME目录中的属性文件。此文件中声明的配置将应用于运行DevTools的所有应用程序。 限制 使用DevTools的Spring应用程序会自动启动LiveReload服务器。不幸的是,此服务器中只有一个实例可以同时运行。更确切地说,只有第一个可行。这不仅适用于使用DevTools的Spring应用程序的多个实例,也适用于任何其他应用程序,这些应用程序也在后台使用LiverReload,例如Gatsby在开发模式下。 如果要将Spring应用程序配置为不启动LiveReload服务器,可以在application.properties加入:

spring.devtools.livereload.enabled=false

关机钩ShutdownHook DevTools依赖于关机挂钩的SpringApplication。如果您使用以下方法手动禁用挂钩,它将无法正常工作:

springApplication.setRegisterShutdownHook(false);

认情况下,挂钩已启用,因此除非您明确禁用它,否则无需担心它。 与第三方库的冲突 DevTools通常应该正常运行,但它可能与第三方库有冲突。特别是,已知问题是使用标准ObjectInputStream进行反序列化存在存在冲突。如果发生此类冲突,您可以通过设置禁用自动重启:

spring.devtools.restart.enabled=false

将不再触发重启。但是,仍将使用重新启动类加载器。如果您需要完全禁用类加载器,则需要在启动应用程序之前执行此操作:

public static void main(String args) {
    System.setProperty("spring.devtools.restart.enabled", "false");
    SpringApplication.run(MyApp.class, args);
}

即使您不使用自动重启,您仍然可以从DevTools提供的其他功能中受益。

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云原生架构实践

JHipster生成微服务架构的应用栈(三)- 业务微服务示例

这里选择Microservice application,所有自定义业务逻辑的微服务都可以选择这个类型。

46620
来自专栏散尽浮华

rsync+inotify实时同步环境部署记录

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足。 首先,rsync在同步数据时,需要扫描...

37070
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Keepalived和浮动IP设置高可用性HAProxy服务器

高可用性是系统设计的一个功能,允许应用程序在发生故障时自动重启或重新路由工作到另一个有能力的系统。在服务器方面,建立高可用性系统需要一些不同的技术。必须有一个可...

44230
来自专栏信安之路

平台安全之中间件安全

一次web访问的顺序,web浏览器->web服务器(狭义)->web容器->应用服务器->数据库服务器

17600
来自专栏日常分享

Java 以及JEE环境快速搭建

  博主最近找了一个Java Development的实习,加上上个月末的考试周,所以很久没有更新博客。   上了一周的班,还没有在熟悉项目的阶段。

21510
来自专栏云计算教程系列

如何在Debian 9上使用Apt安装Java

Java和JVM(Java的虚拟机)是许多软件所必需的,包括Tomcat,Jetty,Glassfish,Cassandra和Jenkins。

1K20
来自专栏pangguoming

CentOS7安装openjdk、tomcat和mysql流程介绍

首先是前戏,推荐一个远程工具Xshell和Xftp搭配使用,以下是Xshell的官网  http://www.netsarang.com/products/xs...

44580
来自专栏雪胖纸的玩蛇日常

python3+django2 开发易语言网络验证(下)

29330
来自专栏上善若水

005-centos7 搭建svn服务器

可以看到,没有telnet服务和3690端口。增加telnet服务器和3690端口:

40440
来自专栏我和未来有约会

Windows 7 旗舰版 VHD安装体验

indows 7 旗舰版 VHD安装体验 近日为了将开发环境、测试环境互相分离来,体验了一下“特殊的虚拟机 VHD启动”,我现在的机器(IBM X200)上安装...

38260

扫码关注云+社区

领取腾讯云代金券