关键词:
分布式开发 ;微服务;springboot /热部署–提高开发效率
热部署的需求场景:
本地调试时因为改动了一行代码而要重启本地服务器
因为本地代码的修改,而要将代码重新上传到服务器,重启服务器
优点:
无论是线上还是线下适用
无需重启服务器,提高开发效率,节约时间
Java热部署和热加载的联系
不需要重启服务器编译/部署项目
都是基于就Java的类加载器实现的
区别:
部署方式:
热部署:在web 项目开发或者是服务器项目开发的时候不需要重启服务器而做到项目重新的部署
热部署:重新加在整个应用程序,会释放资源
热加载:在修改Java代码之后重新加载class
主要依赖于Java的;类加载器,会在容器启动的时候在后台开一条线程,实时监测字节码文件的时间戳,如果改变就重新加载class 文件
举例:
运行tomcat项目需要3步
1.打包并指定给tomcat
2.启动tomcat
3.解压war包并运行(第三步和第二步一起的)
2.热部署
就是已经运行了项目,更改之后,不需要重新tomcat,但是会清空内存,重新打包,重新解压war包运行
可能好处是一个tomcat多个项目,不必因为tomcat停止而停止其他的项目
3.热加载
是基于字节码进行更改的,不释放内存,开发可用,上线不可用,比如修改类了,原先的类内存不会释放,新的类还会增加内存.
更改字节码的意思是应该更改exploded war包中的.class文件.
–
Java类的加载过程
初始化JVM 类加载器(classLoader) 加载class 文件
Java程序不同于其他语言(c/c++)不能在本地运行,本地Java文件在序列化为串,把串编译为源码对象,再把源码对象 编译成.class 文件。类加载器负责将.class 文件加载到JVM中运行
系统类加载器:AppClass Loader 卡是加载指定的类
类加载器会先将加载任务交给器父类,如果父类找不到再有自己去加载
启动类加载器Bootstrap Loader 是顶级加载器,父类加载器为空
热部署
实现方式:通过类热加载实现/配置tomcat 实现热部署(将web 文件放在webapps 文件夹里)
此处的理解其实我自己是觉得看看就行,要想透彻的理解,应该更深入和细致的理解Java程序,
实现spring boot项目热部署★★
一:添加依赖 springloaded(失败)
放在:<build><plugins><plugin>下★★
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.7.RELEASE</version>
</dependency>
</dependencies>
失败历程:项目部署成功,使用maven 命令运行项目,也成功。
idea 默认关闭自动编译:手动编译
但是都无法实现热部署
虽然实现一个功能知道实现它的一个的方法就行,并不影响代码,但是总觉得死的不明不白。如果有人知道,如能告知:十分感谢
一:添加依赖 spring-boot-devtools
这个就太方便了:导入依赖,直接运行,每次更改代码之后编译就行了(ctrl+f9)
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.0.9.RELEASE</version>
<optional>true</optional>
</dependency>
添加在依赖中,要自己设置: <optional>true</optional>