1 热部署
在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受啊。在Java开发领域,热部署一直是一个难以解决的问题,目前的Java虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。下面我们就看看对于简单的类修改的热部署怎么实现。
1.1 原理
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
1.2 devtools工具包
devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),
java类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
devtools可以实现页面热部署(页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现)。
1.3idea的工具设置
当我们修改了类文件后,idea不会自动编译,需要通过ctrl+F9来触发,
如果想要自动生效得修改idea设置,该功能按着个人的喜好来设置,修改类后,当我们窗口切换时候可以看到热部署的发生
(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + / ,选择Registry,勾上Compiler autoMake allow when app running
1.4 热部署的排除
默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
1. 我们在resources/static目录下创建tx.js文件每次发生修改后的并不重启,而是采用livereload的方式。
2. 同时我们可以根据自己的意愿来设置想要排除的资源
领取专属 10元无门槛券
私享最新 技术干货