Spring Boot (四十四)——在idea中实现热部署

什么是热部署?

在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的 Class 文件,这个文件里记录着和代码等对应的各种信息,然后 Class 文件将被虚拟机的 ClassLoader 加载。
而热部署正是利用了这个特点,它监听到如果有 Class 文件改动了,就会创建一个新的 ClaassLoader 进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前。

SpringBoot开发热部署

Spring Boot 中,只需要添加 spring-boot-devtools 依赖就可以轻松实现热部署。Spring Boot 中热部署最最关键的原理就是两个不同的 classloader:

  • base classloader
  • restart classloader

其中 base classloader 用来加载那些不会变化的类,例如各种第三方依赖,而 restart classloader 则用来加载那些会发生变化的类,例如你自己写的代码。Spring Boot 中热部署的原理就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另一个新的 restart classloader 代替。在整个过程中,因为只重新加载了变化的类,所以启动速度要比重启快。

实践

1、创建工程

(1)选择spring-boot-devtools,
在这里插入图片描述

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

可以看到,pom.xml文件里添加依赖中,这个optional设置为true,表示当前项目依赖devtools,而依赖当前项目的项目如果项目使用devtools,需要重新添加,这个依赖关系不能传导。

只要这个依赖,我们修改Java代码后,不需要重启工程,使用快捷键“Ctrl+F9”,就能够重新构建工程,编译代码。
效果如下:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello devtools! ";
    }
}

在这里插入图片描述
当我们修改代码后,按下“Ctrl+F9”后:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello devtools! hahahahah";
    }
}

在这里插入图片描述
可以看到不用重启工程,就实现了自动刷新。

当然这只是间接的实现了热部署,要想实现在每一次作了修改之后,都会自动的重启 ,需要实现下面的步骤。但要注意的是,实现了热部署即时编译,也不一定是我们想要的结果,因为不停地编译会占用更多的系统资源,因此即时编译一般不建议使用。

(2)左上角依次找到【File】——【Settings…】——【Build,Execution,Deployment】——【Compiler】,

勾选"Build project automatically",然后右下角【Apply】——【OK】:
在这里插入图片描述
(3)、使用 Ctrl+Shift+A 快捷键搜索"Registry",选择搜索出来的第一个,找到"compiler.automake.allow.when.app.running",勾选,【Close】关闭:
在这里插入图片描述

但是有另外一个问题,就是静态资源文件!使用 devtools ,默认情况下当静态资源发生变化时,并不会触发项目重启。虽然我们可以通过配置解决这一问题,但是没有必要!因为静态资源文件发生变化后不需要编译,按理说保存后刷新下就可以访问到了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值