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方式去调试问题。至于说热部署和热加载,哪种更适合你的特殊需要,就格取所好吧!