SpringBoot之热部署

SpringBoot提供了一组开发工具Spring-boot-devtools,可以提高开发者的工作效率,开发者可以将该模块包含在任意项目中,最方便的功能莫过于热部署了

基本用法

用法非常简单,只需要在pom中引入该工具即可,这里多了一个optional选项,是为了防止将devtools依赖传递到其他模块中,当开发者将应用打包运行后,devtools会被自动禁用。

<!-- 热部署模块 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>

如果开发者使用eclipse,那么在修改完代码并保存后,项目将自动编译触发重启。
如果使用的是idea,参考此文章

基本原理

如下图所示,整个项目中引用的类为绿色方块,它由开发者编写的会变化的类和项目中引用的第三方jar组成,冷启动每次重启都会重新加载所有的类。

Springboot是用的自动重启技术涉及到两个类加载器,

  • baseclassloader用来加载不会变化的类,也就是引用的三方jar,
  • restartclassloader用来加载开发人员编写的类

每当检测到代码变化时,baseclassloader继续使用原来的,但是restartclassloader将被一个新创建的类加载器替代,大大提高了启动速度。
在这里插入图片描述

自定义监控资源

默认情况下,/META-INF/maven、/META-INF/resources、/resources、/static、/public和/templates位置下的资源变化不会触发重启,如果希望改变这些默认配置,可以在application.properties文件中设置

spring.devtools.restart.exclude=static/**

这表示从默认的不触发目录中移除static目录

spring.devtools.restart.additional-paths=src/main/resoutces/static

这表示当src/main/resoutces/static目录下文件发生变化时,会自动重启项目

使用触发文件配置热部署

由于项目编写是一个持续的过程,并不需要没修改一行代码就触发热重启,这样不仅浪费电脑性能,没有实际意义,因此,可以设置一个触发文件,通过修改文件来触发项目热重启,这样修改代码就不会频繁重启。

  1. 在application.properties文件中设置

     spring.devtools.restart.trigger-file=restart.trigger-file
    
  2. 在resources目录下创建一个restart.trigger-file文件。

配置完成后,再修改代码也不会触发自动重启,但是当修改resources目录下restart.trigger-file文件后,项目就会重启一次。

需要注意的是,如果项目中文件没有变动,单纯的修改restart.trigger-file文件不会触发热重启

禁用自动重启

在application.properties文件中设置

spring.devtools.restart.enabled=false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值