springboot实现热部署(基于2021新版idea)
Spring Boot中提供了一组开发工具 spring-boot devtools,可以提高开发者的工作效率,开发者可以将该模块包含在任何项目中,spring-boot-devtools 最方便的地方莫过于热部署了。
1. 基本用法
要想在项目中加入devtools模块,只需添加相关依赖即可,代码如下:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency>
注意:runtime:运行时范围
runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
当开发者将spring-boot-devtools 引入项目后,只要classpath 路径下的文件发生了变化,项目就会自动重启,这极大地提高了项目的开发速度。如果开发者使用了Eclipse, 那么在修改完代码并保存之后,项目将自动编译并触发重启,而开发如果使用了IntelliJ IDEA,默认情况下,需要开发者手动编译才会触发重启。手动编译时,单击Build→Build Project菜单或者按Ctrl+F9快捷键进行编译,编译成功后就会触发项目重启。当然,使用IntelliJ IDEA的开发者也可以配置项目自动编译,配置步骤如下:
步骤01单击File→Settings菜单,打开Settings 页面,在左边的菜单栏依次找到Build,Execution,Deployment→Compile, 勾选Build project automatically,如图所示。
步骤02按 打开Settings 页面,在左边的菜单栏依次找到Advanced Settings, 勾选Allow auto-make to start even if developed aplication is crrenty running,如图所示。
2. 基本原理
Spring Boot中使用的自动重启技术涉及两个类加载器,一个 是baseclassloader,用来加载不会变化的类,例如项目引用的第三方的jar;另-一个是restartclassloader,用来加载开发者自己写的会变化的类。当项目需要重启时, restartclassloader将被一个新创建的类加载器代替,而baseclassloader则继续使用原来的,这种启动方式要比冷启动快很多,因为baseclassloader 已经存在并且已经加载好。
3. 自定义监控资源
默认情况下,META-INF/maven./META-INF/resources、/resources、/static、/public以及/templates位置下资源的变化并不会触发重启,如果开发者想要对这些位置进行重定义,在application.properties中添加如下配置即可:
spring.devtools.restart.additional-exclude=static/**
这表示从默认的不触发重启的目录中除去static目录,即classpath:static 目录下的资源发生变化时也会导致项目重启。用户也可以反向配置需要监控的目录,配置方式如下:
spring.devtools.restart.additional-paths=src/main/resources/static
完整的建议application.yaml文件配置devtools
spring:devtools:restart:enabled:true#设置开启热部署additional-paths: src/main/java #重启目录exclude: WEB-INF/**freemarker:cache:false#页面不加载缓存,修改即时生效,每次修改 .ftl 或 .js 文件后,立即生效。
4. 使用LiveReload
上一小节介绍了静态资源目录下的文件变化以及模板文件的变化不会引发重启,虽然开发者可以通过修改配置改变这一默认情况, 但实际上并没有必要,因为静态文件不是class. devtools 默认嵌入了LiveReload 服务器,可以解决静态文件的热部署,LiveReload 可以在资源发生变化时自动触发浏览器更新,LiveReload 支持Chrome、Firefox 以及Safari。以Chrome为例,在Chrome应用商店搜LiveReload,结果如图所示。
在浏览器中打开项目的页面,然后单击浏览器右上角的LiveReload按钮,开启LiveReload连接,此时当静态资源发生改变时,浏览器就会自动加载。
5. 禁止自动重启
如果开发者添加了spring-boot -devtools依赖但是不想使用自动重启特性,那么可以关闭自动重启,代码如下:
spring.devtools.restart.enabled=false
也可以在Java代码中配置禁止自动重启,配置方式如下:
@SpringBootApplicationpublicclassTestspringbootApplication{publicstaticvoidmain(String[] args){System.setProperty("spring.devtools.restart.enabled","false");SpringApplication.run(TestspringbootApplication.class, args);}}
版权归原作者 探索er 所有, 如有侵权,请联系我们删除。