在Java中快速使用热部署

2020-10-16 18:54发布

前言:在Javaweb的开发中,我们启动项目后,某个类新增或删除了属性、添加或者修改了注解、新增或者删除方法等等都要重启服务器,才能生效。这样频繁的重启项目,大大降低了开发效率。为了应对这种情况,我们通常会在项目中使用到“热部署”。

下面主要介绍两种热部署:

一、第一种:使用SpringBoot插件实现热部署

1、如何使用?

(1)Springboot提供的spring-boot-devtools包,在pom.xml导入依赖,即可使用。

<!-- SpringBoot热部署插件 --> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-devtools</artifactId> 
</dependency>

(2)然后可能会在application.properties中进行一些配置

 #默认排除的资源 
spring。devtools。restart。exclude=static/**,templates/**,public/** 
#增加额外的排除资源 
spring。devtools。restart。additional-exclude=public/**  #处理默认配置排除之外的 
spring。devtools。restart。enabled=false  #禁用自动重启

2、优缺点:

(1)好的地方:快捷使用,导入依赖即可,它是真正的热部署。

(2)不好的地方:这种热部署是怎么实现的呢?它实际上是通过监控classpath【1】的变化来实现的,假如classpath中的文件发生了变化,就会触发重启,而这个重启是reload重启。

简单来说,一个完整的流程应该是:我们修改了代码,然后重新编译,热部署插件就会检测到字节码文件前后的改变,最后触发重启。注意!它的重启是服务器重启,重新加载。说到底,这个热部署插件帮我们做的就是,以前,我们手动地点击重启按钮,现在,在编译后自动检测到类文件变化,自动重启服务器。

不停地重启服务器重新加载!不停地重启服务器重新加载!不停地重启服务器重新加载!

但是,它是免费的,项目不大的话,可以用用。免费的!!!

注:【1】什么是classpath?

Java 中的classpath,就是class的path(字节码文件*.class的路径)。在开发时,我们会main下定义很多包,很多类(Student.java等等)以及在resources下有很多配置(spring-mvc.xml、mybatis.xml等);

而在编译之后,这些包、类、和配置等,都会编译成字节码文件,转移到classes文件夹下存放。而这个classpath指的就是所存放字节码的路径。

例如,在常见的“ssm”项目中,

开发时期的项目里,src/main/下面的javaresources文件夹都被(编译)打包到了生产包的WEB-INF/classes/目录下;

而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。

同时由Maven引入的依赖都被放入到了WEB-INF/lib/下面。

最后,编译后的class文件和资源文件都放在了classes目录下。

(而这个“classpath”路径就是指到“classes”,编译,检测这个文件夹下的类文件,与之前的对比,如果不一样,就重启,就是上面这个热部署的原理。)

 

二、使用JRebel来实现热部署

Intellij IDEA 中的热部署插件,功能更强大,可以敏锐地检测到代码的变化,却又不用每次都重启服务器。所以更高效更好用。

当然,是收费的!!!

这个下回再说,当然,也有通过配置Tomcat的方式,实现热部署,但是比较不稳定。

未完待续~

作者:咔啦永远OK

链接:https://blog.csdn.net/weixin_45764765/article/details/108946143

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。