SpringBootDevTools使⽤教程
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 是⼀个有⽤的⼯具,它允许您在⽂件中进⾏更改时⽴即在浏览器中更新页⾯,如HTML,CSS,图像等。它甚⾄可以根据需要预处理⽂件 - 这意味着⾃动编译SASS或LESS⽂件。
Spring DevTools⾃动启动LiveReload服务器的本地实例,该服务器监视您的⽂件。您需要做的就是安装⼀个浏览器扩展,然后你就可以了。它不仅可⽤于开发应⽤程序的前端(如果将其作为Spring应⽤程序⼯件的⼀部分进⾏分发),还可⽤于监视和重新加载REST API的输出。
属性覆盖
在本地开发应⽤程序时,与在⽣产环境相⽐通常需要不同的配置。⾃⼰管理多组配置是不必要的复杂。好消息是Spring Boot DevTools为您的本地开发配置了许多开箱即⽤的属性。
spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.mustache.cache=false
server.servlet.session.persistent=true
abled=true
spring.mvc.log-resolved-exception=true
server.servlet.jsp.init-parameters.development=true
可以检查中所有属性的列表。
远程连接
除本地开发外,您还可以连接到运⾏DevTools的远程应⽤程序。这不适⽤于⽣产环境,因为它可能是⼀个严重的安全风险。但是,它在预⽣产环境中⾮常有⽤。
默认情况下不启⽤远程连接。您需要通过修改pom⽂件显式启⽤它:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeDevtools>false</excludeDevtools>
</configuration>
reactor debug mode is enabled</plugin>
</plugins>
</build>
然后,您需要设置⼀个密码,以便在连接到远程应⽤程序时⽤于⾝份验证:
secret=somesecret
远程应⽤程序运⾏后,您可以启动远程连接会话,现在,您需要启动
org.springframework.boot.devtools.RemoteSpringApplication,使⽤远程应⽤程序的URL作为参数启动。请注意,https如果可能,请使⽤https。
在IDE中轻松运⾏远程连接。在IDEA中,您只需创建⼀个新的运⾏配置。转到Run → 并创建⼀个+左上⾓带有图标的新配置。选择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.abled=false
关机钩ShutdownHook
DevTools依赖于关机挂钩的SpringApplication。如果您使⽤以下⽅法⼿动禁⽤挂钩,它将⽆法正常⼯作:springApplication.setRegisterShutdownHook(false);
认情况下,挂钩已启⽤,因此除⾮您明确禁⽤它,否则⽆需担⼼它。
与第三⽅库的冲突
DevTools通常应该正常运⾏,但它可能与第三⽅库有冲突。特别是,已知问题是使⽤标准ObjectInputStream进⾏反序列化存在存在冲突。如果发⽣此类冲突,您可以通过设置禁⽤⾃动重启:
abled=false
将不再触发重启。但是,仍将使⽤重新启动类加载器。如果您需要完全禁⽤类加载器,则需要在启动应⽤程序之前执⾏此操作:
public static void main(String args) {
System.setProperty("abled", "false");
SpringApplication.run(MyApp.class, args);
}
即使您不使⽤⾃动重启,您仍然可以从DevTools提供的其他功能中受益。
总结
以上所述是⼩编给⼤家介绍的Spring Boot DevTools使⽤教程,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论