服务器之家

服务器之家 > 正文

Spring Boot DevTools使用教程

时间:2021-06-10 15:25     来源/作者:jdon

devtools通过提供自动重启和livereload功能,使您更快、更轻松地开发spring boot应用程序。除此之外,它还将各种属性设置为更适合本地开发的值。此外,它允许您远程连接到您的应用程序,并仍然使用其大部分功能。在生产中运行时,不要使用devtools。

如何使用devtools进一步加快spring boot开发速度?你需要做的就是添加正确的依赖关系,与spring boot一样,设置非常简单。

如果您使用maven:

?
1
2
3
4
5
<dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-devtools</artifactid>
 <optional>true</optional>
</dependency>

或者,使用gradle时:

?
1
2
3
4
5
6
7
8
9
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 是一个有用的工具,它允许您在文件中进行更改时立即在浏览器中更新页面,如html,css,图像等。它甚至可以根据需要预处理文件 - 这意味着自动编译sass或less文件。

spring devtools自动启动livereload服务器的本地实例,该服务器监视您的文件。您需要做的就是安装一个 浏览器扩展 ,然后你就可以了。它不仅可用于开发应用程序的前端(如果将其作为spring应用程序工件的一部分进行分发),还可用于监视和重新加载rest api的输出。

属性覆盖

在本地开发应用程序时,与在生产环境相比通常需要不同的配置。自己管理多组配置是不必要的复杂。好消息是spring boot devtools为您的本地开发配置了许多开箱即用的属性。

?
1
2
3
4
5
6
7
8
9
10
11
12
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文件显式启用它:

?
1
2
3
4
5
6
7
8
9
10
11
<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类型。

从devtools模块中选择remotespringapplication作为main类,并设置远程参数远程应用程序的url。

运行此配置后,如果与远程应用程序的连接成功,您应该会看到相应的输出。

连接到远程应用程序后,devtools监视类路径更改,与本地开发相同。但是,它不是本地重新启动,而是将更改推送到远程服务器并在那里触发重新启动。这比构建应用程序和部署到远程计算机要快得多。

全局配置

可以像使用任何其他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

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

?
1
2
3
4
public static void main(string args) {
 system.setproperty("spring.devtools.restart.enabled", "false");
 springapplication.run(myapp.class, args);
}

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

总结

以上所述是小编给大家介绍的spring boot devtools使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.jdon.com/50644

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部