前言:在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/
下面的java
和resources
文件夹都被(编译)打包到了生产包的WEB-INF/classes/
目录下;而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。
同时由Maven引入的依赖都被放入到了
WEB-INF/lib/
下面。最后,编译后的class文件和资源文件都放在了classes目录下。
(而这个“classpath”路径就是指到“classes”,编译,检测这个文件夹下的类文件,与之前的对比,如果不一样,就重启,就是上面这个热部署的原理。)
二、使用JRebel来实现热部署
Intellij IDEA 中的热部署插件,功能更强大,可以敏锐地检测到代码的变化,却又不用每次都重启服务器。所以更高效更好用。
当然,是收费的!!!
这个下回再说,当然,也有通过配置Tomcat的方式,实现热部署,但是比较不稳定。
未完待续~