相信做开发的程序猿们都体验过修改一次代码就要重启一次的滋味吧简直不要太爽,也比较影响工作效率,本来热部署准备后面介绍的但是为了方便就先讲了把。本文主要介绍两种方法配置热部署,下面请听细细道来。
一springloaded plugin
第一种方式通过springloaded plugin 插件的方式 在pom.xml 中添加如下节点
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<!-- springload hot deploy -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
添加完成后使用spring-boot:run的方式启动如下图。
便可以启动项目但是测试一下热部署 发现可以 具体可以下载我的代码下来实验 接下来把项目关闭再次启动发现出问题了端口占用,通过这种方式配置的热部署 用spring-boot:run 的启动方式运行工程, 关闭时不会关闭后台进程。通过第二种方式启动将springloaded-1.2.4.RELEASE.jar下载下来放到任意文件夹 文件夹下 然后将eclipce run VM参数参数设置为-javaagent:H:\m2\repository\org\springframework\springloaded\1.2.4.RELEASE\springloaded-1.2.4.RELEASE.jar -noverify 这样通过run as 启动时也能热部署
关闭后端口是可以关闭的没有出现上一种方法的问题但是测试的时候又发现了一个问题 修改一个方法的时候能够生效,但是添加一个方法的时候就没有效果了这个就尴尬了下面介绍第二种方法。
二spring-boot- devtools
将上述的插件注视掉 在pom.xml中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
添加相应的插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
启动项目测试 :
1重新启动端口是否能被关闭
2修改一个方法能否热部署
3添加一个方法能否热部署
4添加一个类能否热部署
5修改配置文件能否热部署
发现都是成功的。由此热部署便配置好了
其原理是使用了两个classLoader ,一个是Classloader加载那些不会改变的类如第三方jar ,另一个ClassLoader加载那些会改变的类成为restart ClassLoader ,这样有代码更改的时候原来的,restart ClassLoader 在创建一个新的restart ClassLoader 加载的类相对较少所以启动比较快,便达到热部署的效果。
文章地址 http://www.haha174.top/article/details/252133
项目源码 https://github.com/haha174/boot.git