热部署,就是不需要停掉服务,可以线上改,改完立马生效。
1.为什么用热部署?
因为不启用热部署时每次更改java数据都要重启服务器影响开发效率。
2.热部署的实现原理?
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
3. 热部署的实现方式
springboot有3中热部署方式:
1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动
<!--实现热部署-->
<!--devtools热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
然后在Settings→Build→Compiler中将Build project automatically勾选上,最后按ctrl+shift+alt+/ 选择registy,将compiler.automake.allow.when.app.running勾选。另外,对于某些idea没有这个选项的,设置好其他的之后,ctrl+f9也是可以的。
(1) devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),
实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的
(2)配置了true后在修改java文件后也就支持了自动部署,不过这种方式是属于项目重启,会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。
2.使用springloaded本地加载启动,配置jvm参数
-javaagent:<jar包地址> -noverify
3.使用devtools工具包,操作简单,但是每次需要重新部署
由于本人只用过一种,其他两种方式也是百度出来的没有实践过,后期进行学习了再详写