idea的热加载与热部署

一:热加载与热部署
    热部署的意思就是不用手动重启环境,修改类后,项目会自动重启。但是如果项目比较大,重启也需要耗时十几秒左右。
    热加载意为不需要重新启动,修改了什么文件就重新加载什么文件,可以做到1,2秒左右就能看到效果。所以更节省时间。
    但是二者是互有利弊。热部署的好处是,重新启动,不存在修改文件和整个环境不一致的情况,而且是任何修改都生效。但是这里的热加载却有限制。吾经过测试发现,至少在修改controller上方法的requestMapping时是不会马上生效。因为这个是在启动时就已经加载的,所以这也是热加载修改什么加载什么带来的必然结果。
 
二:热部署
    热部署网上有很多博客,基本可以说是四步。
 
    1)修改build为自动编译
    
 
 
2)允许运行时编译:alt+ctrl+shift+/ 调出Registry,选中运行时编译
 
3)添加pom依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>
 
4)maven编译插件
<build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <fork>true</fork>
          <addResources>true</addResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
这种方式就是修改后会自动重新启动,免去手工重启。并不能实现不重启而自动加载修改的类。
 
三:热加载
    要做到热加载需要两步。一是编译,二是加载。吾经过测试整理出以下:
    1)设置自动编译,见2.1
 
    2)设置运行运行时编译,见2.2
 
    3)设置手动“update”或者idea失去焦点时更新类与资源
 
 
4)以debug方式启动
 
    这样就能实现修改了类后,手动点击“update” 即idea下面的 刷新按钮,或者点开另外个程序,idea就会重新去加载更新的类。这时马上就能看到更新效果。(项目没有重启,但是会看到idea有一个刷新的动作)。这种方式的局限性前文已有说到。
    吾测试时,有以下几个坑。
    a)当不以debug方式启动时,设置允许自动编译后,就算反编译类,发现已经更改,就算去手动刷新(ctrl+F10)也不会起作用。我猜想是因为idea内置缓存的原因。所以必须以debug方式启动。
 
四:结尾
    正常的方式是,我们在开发一个功能后,才需要启动项目。或者debug方式去调试问题。至于说热部署和热加载,哪种更适合你的特殊需要,就格取所好吧!
 
Tags: