spring boot 热部署

可以让spring boot不需要重启服务端,即可应用代码的改变。

 

一、什么是热部署?

在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。

而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的 ClassLoader进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前。

这里要区分清楚。如果没有热部署,我们改动了代码之后(比如增加了一个方法),如果想让其生效,就要手动重启服务器,重新部署代码,把java类加载到jvm中,才能使用改动的部分。热部署则是不重启服务器,只是创建一个新的ClassLoader加载改动了的这个类,之后将其加载到jvm中,就可以使用了。

二、实现热部署

1.使用spring-boot-devtools(推荐)

pom.xml

配置之后,只要代码有改动,就可以进行热部署。超级好用,强力推荐。

2.使用springloaded(比较麻烦,需要mvn打包)

pom.xml

需要使用mvn clean packagespring-boot:repackage打包,

然后进入项目的pom.xml文件所在目录,使用mvn clean spring-boot:run命令,在cmd窗口启动项目,热加载才能生效。

如果直接Run As Application/Spring Boot App是没有效果的。

三、使用注意

由于热部署的时候是产生了新的类加载器,把更变过的类加载到jvm中,而不是重新部署,把这个更变了的类重新加载,所以在jvm中可能会同时存在两个类。

举个例子:

代码中只有一个testController类,但是虚拟机中会存在两个testController,虽然是同一个Class文件,但是这两个testController是相互独立的(一个变更过,一个没有变更)。所以在这种情况下使用instanceof(即testController instanceof testController)很可能出现false的结果。

四、总结

感觉热加载是个方便开发和部署的东西。如果正确使用,感觉会很方便哦。