前言
在我们的项目开发过程,随着开发的功能越来越多,项目越做越大,代码也越来越多,单个项目启动可能都要几分钟。假如你编码能力非常强,一次编码,一次测试通过,不用重启多次项目,但事实这是不存在,每次开发每次调试每次debug你可能都要重复启动N多次你的项目。启动几次几分钟,一天下来可能我们都在启动我们的项目,这种效率实在糟糕透了,有没有工具将我们改过的代码自动编译好放进虚拟机替换呢。这种工具是有的,Spring boot官方提供给我们devtools工具以便我们便捷开发。这一类自动重启热部署工具都是基于类加载机制来实现的。
devtools开发者工具
Spring boot包含了一套额外的工具,可以让应用程序开发更加快捷。spring-boot-devtools 模块可以引入到任何项目,它可以让我们开发Spring boot应用更加方便快捷。为了得到 devtools工具支持。你需要将其引入到你的工程构建中来,在Maven 的 pom 文件添加
org.springframework.boot spring-boot-devtools true
当运行完全打包的应用程序时(以jar包运行的),将自动禁用开发人员工具。就是说,这个工具只是在我们IDE工具中开发有用的,完全不用担心会影响到生产环境。
spring-boot-devtools 在Maven中将依赖项标记为可选,这是防止将devtools过渡应用到使用项目的其他模块。
devtools自动重启
使用spring-boot-devtools每当类路径上的文件发生更改时,都会自动重新启动。在IDE中工作时,这可能是一个有用的特性,因为它为代码更改提供了一个非常快速的反馈循环。默认情况下,指向文件夹的类路径上的任何条目都会被监视更改。注意,某些资源,如静态资产和视图模板,不需要重新启动应用程序。
触发重新启动
在DevTools监视类路径资源时,触发重新启动的唯一方法是更新类路径。导致类路径更新的方式取决于您正在使用的IDE。在Eclipse中,保存修改后的文件将导致类路径被更新并触发重新启动。在IntelliJ IDEA中,构建项目(Build -> Build Project)具有相同的效果。
当你看到上面的自动重启估计你已经不想在看devtool 的相关内容了,这对于我们的开发人员来说显得过于鸡肋。既然是整个系统自动重启,那对于我们开发者来说没产生多大便利,我们往往需要的是当我们修改一个文件时,有工具将我们修改的文件重新编译然后加载到正在运行的JVM中,这会很快捷。接下来我们着重介绍第三方的热部署工具。
Jrebel 热部署
这个是Jrebel,现在是收费了,记得多年前使用的时候是收费的。当然付费对我们来讲是不可能的,接下来教大家怎么免费的使用Jrebel。
官网地址:https://jrebel.com/software/jrebel/
我这里使用的是intell Idea 工具,有其他工具需要的我再另外做说明
安装Jrebel
- 在IDEA中一次点击 File->Settings->Plugins->Brows Repositories
- 在搜索框中输入JRebel进行搜索
- 找到JRebel for intellij
- install
- 安装好之后需要restart IDEA
安装完成后会出现下面这两个启动图标,Jrebel插件安装成功
激活Jrebel(自建JRebel License Server)
安装 JDK,并设置环境变量,版本至少为 1.6
安装 MAVEN
将 JRebel License Server 项目克隆到本地,或下载 zip
项目地址:https://gitee.com/gsls200808/JrebelLicenseServerforJava
git clone https://gitee.com/gsls200808/JrebelLicenseServerforJava.git
在项目的根路径下用mvn命令编译打包
mvn cleanmvn compilemvn package
运行项目
java -jar JrebelBrainsLicenseServerforJava-1.0-SNAPSHOT-jar-with-dependencies.jar -p 8081
运行完之后 访问 127.0.0.1:8081 出现下图即为成功
为了完成激活我们还需要生成一个GUID 可通过下面链接进行生成
https://www.guidgen.com/
拼上生成的GUID整个激活地址为
http://127.0.0.1:8081/13bae89c-99b0-452b-8725-936f7057bf93
打开Setting-> Jrebel -> Active License,如图(邮箱随意)
激活成功入下图
接下来还需要对我们的intelij Idea 做一些设置
- setting -> Build, Execution, Deployment -> Compiler 勾上Build project automatically
- setting -> Appearance & Behavior ->System Settings 勾上 Save files automatically if application is idle for. 一般后面的框设置为 10s
- 打开运行时编译,按快捷键 Shift+Ctrl+Alt+/ ,选择 Registry ,勾上如图所示
基于以上步骤,所以的设置完成,你只需要用下图的两个按钮运行你的项目即可使用
Jrebel 的热部署加载
其实热部署加载的本质就是 将修改的类重新编译 丢到JVM里面替换旧的class文件,也是基于Java 的类加载机制来实现的,当我们在Intelij idea 做完修改之后,按 ctrl+F9 即可自动重新加载,注意,Jrebel不是重启,是自动加载热部署。