SpringBoot入门学习(七) ~~ 热部署

目录

 

SpringBoot的热部署

一、入门案例【How】

二、Devtools的原理

三、Devtools排除资源

四、Devtools禁用~~两种方式

五、Devtools重启策略!


SpringBoot的热部署

SpringBoot应用的热部署

所谓的热部署指在不重启Web服务器前提下能使修改生效。

       除了使用JRebel来实现热部署,还可以使用SpringBoot提供的spring-boot-devtools包来完成SpringBoot应用热部署。

  • 如何使用devtools?【what+why+how】

【Why】 SpringBoot项目,每次修改文件之后,都要进行重启重新编译,此时编译的文件类包括了自己开发的类和加载不变的类,比如第三方的jar,这时效率就比较低。能不能在不重启的情况下,只对我们改变的类文件进行编译,这就是热部署,devtools

  • 一、入门案例【How】

1、引入devtools依赖

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

2、写一个简单输出文字的测试类

@Controller
public class DataSource {

  
@Autowired
  
private MyDruidDataSource myDruidDataSource;
  
@RequestMapping("/dataSource")
  
@ResponseBody
  
public String dataSource(){
      System.
out.println(666);
      System.
out.println(777);
      System.
out.println(myDruidDataSource.toString());
     
return "hello dataSource";
   }
}

3、启动项目,尝试访问/dataSource会看到如下:

4、假如说:我把666à888,保存,刷新,查看效果图:

发现还是没有效果,这里的话,需要点击一个编译的按钮:

然后你会发现:它好像也重启了一次。刷新查看效果。

发现我们修改的生效了。

【总结来说】它这种热部署的编译会比较快,可能你在一个简单demo体现不出它的好处,如果说在大型项目中,你就可以看出两者的区别。

 

  • 二、Devtools的原理

SpringBoot重启是reload重启,通过监控classpath的变化,如果classpath中的文件发生了变化,即触发重启。SpringBoot通过两个classpath来完成reload,一个basic classloader中加载不变的类,一个restart classpath中加载classpath中的类,重启的时候,restart classloader中的类丢弃并重新加载。

利用图片理解:

       实际上,它把变化的类文件,跟不变的类文件分开,每次只更新变化的类文件,而不是一整个一起编译,这样子肯定还是比较快。

 

  • 三、Devtools排除资源

举个例子:SpringBoot的静态文件是放在:

resource-> static 文件夹下面,在这个文件夹新建一个index.html

以往我们修改了静态文件,需要进行项目重启,非常麻烦。有了热部署之后呢!我们直接点击“编译”按钮即可。

而且呢!在我们点击热部署之后呢!控制台并没有重启项目。

默认情况下,spring.devtools是排除掉static/,templates/不用编译的。它会把index.html改变的内容加到项目中,这样就可以实现不重启直接刷新查看效果了。

如果说想要添加排除编译的目录的话,可以通过上面的配置进行添加。

【补充注意点:】经过自己的实验之后呢!发现,devtools它只是会监控已经存在的文件,如果你是新建的文件,那么必须重启项目,才能把新的文件加进去。这一点是要注意的。

 

  • 四、Devtools禁用~~两种方式

  1. 不引入devtools的依赖
  2. 配置devtools启动为false

spring.devtools.restart.enabled=false

默认是true

  • 五、Devtools重启策略!

在配置文件中配置:

spring.devtools.restart.trigger-file=trigger.file

 

去监控classpath下面的trigger.file文件,如果该文件发生变化,并且监控java文件有所改变的时候才会去重启项目。

这样的好处是不需要每次都去重启项目,速度更快。

这里案例不就做演示了。

思路:

在项目中,

修改java文件,点击编译之后,项目不重启,

修改trigger.file文件,点击编译之后,项目重启

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值