本文转载自微信公众号《码猿科技专栏》,作者陈谋。转载本文请联系码猿科技专栏公众号。前言SpringBoot中热部署的相信是官方推送的devtools。与devtools相比,JRebel个人感觉在加载速度和易用性上还是JRebel胜出。作为一个“前辈级别”的开发工具,JRebel确实值得一章来介绍。如何破解JRebel费用?之前作者单独写了一篇激活JRebel的文章和教程。没钱可以去看看:用反向代理工具搞JRebel。『本人声明』:作者支持正版,不差钱的建议安装正版。毕竟这么好的工具还是值得的。什么是本地热部署?传统开发中,如果在项目启动过程中修改了代码,不会重新编译运行,但修改后的代码会在项目关闭重启后生效。“本地热部署”是在项目运行过程中能够感知到特定文件代码的修改,从而使项目无需重启即可生效。什么是远程热部署?远程热部署中的“远程”一词是指“远程服务器”。正常开发时只要更改本地代码,重新打包上传服务器重启后即可生效。“你做过这个吗??……”“远程热部署”是指本地代码改动后,无需重新打包上传服务器重启项目即可生效。本地更改后,服务器上的项目代码可以自动更改。有的人一听就懵了,这到底是什么东西?居然有这么神奇的东西。。。。。JRebel和devtools的区别前辈和后辈的对比其实没什么可比性,如果不是JRebel绝对是所有程序员的首选。但是我还是想说说它们之间的区别,如下:JRebel加载速度比devtools快JRebel并不局限于SpringBoot项目,而是可以在任何Java项目中使用,devtools模式下的热部署在功能上有所限制。方法中的修改可以实现热部署,但是添加新的方法或者修改方法参数后热部署不会生效,如何安装JRebel,本地热部署只需要在IDEA中安装一个JRebel插件,远程热部署需要在服务器上安装一个JRebel,这两种方式在之前的文章中都有介绍,我自己搭建了一个反向代理工具,试用了JRebel。如何在本地热部署?JRebel插件安装完成后,在IDEA中开启自动编译,然后在IDEA中找到JRebel工具面板,勾选需要热部署的项目或模块,如下图:勾选成功然后是rebel。将在项目或模块的src/resource下生成xml文件。这时候在SpringBoot的主启动类上右击,会出现用JRebel启动的选项,如下图:当然IDEA的右上角也有一个启动按钮,如下图:①是本地启动和DEBUG模式启动,②是远程热部署时的Update按钮。至此,配置已经成功。如果勾选的项目或模块发生变化,按CRTL+SHIFT+F9,自动重新编译加载变化的部分,无需重启项目。如何远程热部署?远程热部署需要在服务器上安装并激活JRebel,参考之前的文章:我有一个反向代理工具,使用JRebel。激活成功后,需要设置远程连接的密码。在JRebel根目录下执行如下命令:java-jarjrebel.jar-set-remote-password123456789这里设置的123456789是远程密码,IDEA连接服务器时需要用到。服务器配置成功后,在IDEA中的JRebel面板中设置远程热部署模块,如下图:选择成功后,会在src/resource下生成一个rebel-remote.xml文件。此时将SpringBoot项目打包成Jar,上传到服务器,执行以下命令启动项目:nohupjava-agentpath:/usr/local/jrebel/lib/libjrebel64.so-Drebel.remoting_plugin=true-Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9083-jarxxx.jar&libjrebel64.so这个文件是JRebel的lib目录下的一个文件。-Xdebug之后,-jar之前的命令是开启远程调试。如果不需要,可以将其删除。如果你不懂远程调试,你可以看到:震惊!SpringBoot也可以开启远程调试~。项目启动成功后,服务器上的配置就完成了。这时候在IDEA中,需要对刚刚启动的项目进行连接设置,打开File->setting->JRbel&XRebel->JRbelRemoteServers,如下图所示:步骤如下:点击+号添加服务,填写信息servername随机命名服务ServerURL格式:http://ip:port,其中ip为服务器IP,port为项目端口号。远程密码就是上面设置的JRebel密码123456789。点击确定,添加成功。以上设置成功后,点击右上角的远程部署按钮,下图中的按钮②会自动更新服务器上已启动项目的代码,使本地修改自动在服务器上生效:在JRebelConsole面板会打印出远程热部署更新的日志信息,如下图:只要本地有变化,点击远程热部署按钮,代码就会自动上传到服务器并实时更新,无需重启项目。多模块开发的一个坑如果是多模块开发,比如分为api(最终Jar包)、core(核心包)、service(业务层包),最后将api模块打包运行在服务器端,另外两个模块都是依赖模块。虽然在JRebel远程热部署选项中勾选了它们,但是它们的代码改动并不会在服务器上生效。如何解决这个问题?这很简单。将另外两个模块添加到api项目下的rebel-remote.xml文件中。默认值如下:
