自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

熱部署還在用 Devtools 嗎?JRebel 不香嗎?

開(kāi)發(fā) 前端
Spring Boot中的熱部署相信大家用的最多的就是devtools,沒(méi)辦法,官推的。JRebel相對(duì)于devtools,個(gè)人覺(jué)得無(wú)論是加載速度還是使用便捷,JRebel完勝。

[[432835]]

本文轉(zhuǎn)載自微信公眾號(hào)「碼猿技術(shù)專欄」,作者不才陳某。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼猿技術(shù)專欄公眾號(hào)。

前言

Spring Boot中的熱部署相信大家用的最多的就是devtools,沒(méi)辦法,官推的。

JRebel相對(duì)于devtools,個(gè)人覺(jué)得無(wú)論是加載速度還是使用便捷,JRebel完勝。

作為「前輩級(jí)別」的開(kāi)發(fā)利器,JRebel真的值得開(kāi)一章節(jié)來(lái)好好介紹下。

JRebel收費(fèi)怎么破?

前面作者單獨(dú)寫(xiě)過(guò)一篇激活JRebel的文章教程,沒(méi)錢(qián)的可以去看看:擼了個(gè)反向代理工具,搞一搞JRebel。

「特此聲明」:作者支持原版,不差錢(qián)的建議裝個(gè)原版的,畢竟這么好的工具值得。

什么是本地?zé)岵渴?

傳統(tǒng)的開(kāi)發(fā)中,項(xiàng)目在啟動(dòng)過(guò)程中代碼有所改動(dòng)是不會(huì)重新編譯運(yùn)行的,而是要關(guān)閉項(xiàng)目重新啟動(dòng)后修改的代碼才會(huì)生效。

「本地?zé)岵渴稹箘t是能夠在項(xiàng)目運(yùn)行中感知到特定文件代碼的修改而使項(xiàng)目不重新啟動(dòng)就能生效。

什么是遠(yuǎn)程熱部署?

遠(yuǎn)程熱部署的遠(yuǎn)程兩字指的是「遠(yuǎn)程服務(wù)器」,平時(shí)開(kāi)發(fā)中,只要本地代碼改動(dòng)了,必須要重新打包上傳服務(wù)器重新啟動(dòng)之后才會(huì)生效,「你這樣干過(guò)嗎?.......」

「遠(yuǎn)程熱部署」則是本地代碼改變之后,不用重新打包上傳服務(wù)器重啟項(xiàng)目就能生效,本地改變之后能夠自動(dòng)改變服務(wù)器上的項(xiàng)目代碼。

有些人聽(tīng)到這里懵逼了,這是什么鬼?還有這么神奇的東西...........

JRebel和devtools的區(qū)別

前輩和后輩的比較其實(shí)沒(méi)什么可比性,如果不是JRebel「收費(fèi)」了,絕對(duì)是所有程序員的首選。但還是要說(shuō)說(shuō)他們之間的區(qū)別,如下:

  • JRebel加載的速度優(yōu)于devtools
  • JRebel不僅僅局限于Spring Boot項(xiàng)目,可以用在任何的Java項(xiàng)目中。
  • devtools 方式的熱部署在功能上有限制,方法內(nèi)的修改可以實(shí)現(xiàn)熱部署,但新增的方法或者修改方法參數(shù)之后熱部署是不生效的。

如何安裝JRebel?

本地?zé)岵渴鹬恍枰贗DEA中裝一個(gè)JRebel的插件,遠(yuǎn)程熱部署需要在服務(wù)器上裝一個(gè)JRebel,這兩種方式在上一篇文章都介紹過(guò),不會(huì)的可以去看看:擼了個(gè)反向代理工具,搞一搞JRebel。

如何本地?zé)岵渴?

JRebel插件安裝完成之后,將IDEA中的自動(dòng)編譯開(kāi)啟,然后找到IDEA中的JRebel的工具面板,將所需要熱部署的項(xiàng)目或者模塊勾選上即可,如下圖:

勾選成功之后將會(huì)在項(xiàng)目或者模塊的src/resource下生成一個(gè)rebel.xml文件。

此時(shí)在Spring Boot的主啟動(dòng)類上右鍵,將會(huì)出現(xiàn)以JRebel啟動(dòng)的選項(xiàng),如下圖:

當(dāng)然在IDEA的右上角也存在啟動(dòng)的按鈕,如下圖:

①是本地啟動(dòng)和DEBUG模式啟動(dòng),②是遠(yuǎn)程熱部署的時(shí)候更新按鈕。

此時(shí)就已經(jīng)配置成功了,如果勾選的項(xiàng)目或者模塊出現(xiàn)了改變,按CRTL+SHIFT+F9則會(huì)自動(dòng)重新編譯加載改變的部分,不用再重新啟動(dòng)項(xiàng)目了。

如何遠(yuǎn)程熱部署?

遠(yuǎn)程熱部署需要在服務(wù)器上安裝并激活JRebel,參照上篇文章:擼了個(gè)反向代理工具,搞一搞JRebel。

激活成功后需要設(shè)置遠(yuǎn)程連接的密碼,在JRebel的根目錄下執(zhí)行以下命令:

  1. java -jar jrebel.jar -set-remote-password 123456789 

此處設(shè)置的123456789則是遠(yuǎn)程的密碼,在IDEA連接服務(wù)器的時(shí)候需要。

服務(wù)器配置成功后,在IDEA中JRebel的面板中設(shè)置遠(yuǎn)程熱部署的模塊,如下圖:

勾選成功后,將會(huì)在src/resource下生成一個(gè)rebel-remote.xml文件。

此時(shí)將Spring Boot項(xiàng)目打包成一個(gè)Jar,上傳到服務(wù)器,執(zhí)行以下命令啟動(dòng)項(xiàng)目:

  1. nohup java -agentpath:/usr/local/jrebel/lib/libjrebel64.so  -Drebel.remoting_plugin=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9083 -jar xxx.jar & 

libjrebel64.so這個(gè)文件是JRebel的lib目錄下的文件。

-Xdebug之后,-jar之前的命令是開(kāi)啟遠(yuǎn)程調(diào)試的,如果不需要的可以去掉,不知道遠(yuǎn)程調(diào)試的,可以看:驚呆了!Spring Boot還能開(kāi)啟遠(yuǎn)程調(diào)試~。

項(xiàng)目啟動(dòng)成功后,服務(wù)器上的配置就完成了。

此時(shí)在IDEA中需要設(shè)置連接到剛才啟動(dòng)的項(xiàng)目,打開(kāi)File->setting->JRbel&XRebel->JRbel Remote Servers,如下圖:

步驟如下:

點(diǎn)擊+號(hào)添加一個(gè)服務(wù)

填寫(xiě)信息

  • server name隨便起個(gè)服務(wù)的名字
  • server URL格式:http://ip:port,這里的ip是服務(wù)器的IP,port是項(xiàng)目端口號(hào)。
  • 遠(yuǎn)程密碼則是上文設(shè)置的JRebel的密碼123456789。

點(diǎn)擊OK,即可添加成功。

以上設(shè)置成功后,點(diǎn)擊右上角的遠(yuǎn)程部署按鈕,下圖中的②號(hào)按鈕,則會(huì)自動(dòng)更新服務(wù)器上已啟動(dòng)項(xiàng)目的代碼使之本地修改在服務(wù)端自動(dòng)生效:

在JRebel Console這個(gè)面板中將會(huì)打印出遠(yuǎn)程熱部署更新的日志信息,如下圖:

只要本地有了更改,點(diǎn)擊遠(yuǎn)程熱部署按鈕,則會(huì)自動(dòng)上傳代碼到服務(wù)器端并實(shí)時(shí)更新,不用重新啟動(dòng)項(xiàng)目。

多模塊開(kāi)發(fā)的一個(gè)坑

如果是多模塊開(kāi)發(fā),比如分為api(最終的Jar包),core(核心包),service(業(yè)務(wù)層的包),最終打包運(yùn)行在服務(wù)器端的是api這個(gè)模塊,其余兩個(gè)模塊都是屬于依賴模塊,雖然在JRebel遠(yuǎn)程熱部署選項(xiàng)中都勾選了,但是它們的代碼更改并不會(huì)在服務(wù)端生效。

這個(gè)如何解決呢?很簡(jiǎn)單,在api項(xiàng)目下的rebel-remote.xml文件中將其余兩個(gè)模塊添加進(jìn)去,默認(rèn)的如下:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <rebel-remote xmlns="http://www.zeroturnaround.com/rebel/remote"
  3.     <id>xx.xx.xx.api</id> 
  4. </rebel-remote> 

添加之后的代碼如下:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <rebel-remote xmlns="http://www.zeroturnaround.com/rebel/remote"
  3.     <id>xx.xxx.xx.api</id> 
  4.     <id>xx.xx.xx.service</id> 
  5.     <id>xx.xx.xx.core</id> 
  6. </rebel-remote> 

以上的<id>標(biāo)簽中指定的是模塊的包名(package)。

總結(jié)

作為熱部署界的前輩,JRebel依然是敵得過(guò)后浪,果然是姜還是老的辣...... 

希望這篇文章介紹的JRebel能夠提高讀者們的開(kāi)發(fā)效率,反正我是提高了,哈哈~

責(zé)任編輯:武曉燕 來(lái)源: 碼猿技術(shù)專欄
相關(guān)推薦

2012-07-19 10:03:32

2024-11-12 16:28:34

2021-07-08 06:52:41

ESClickHouse Lucene

2021-04-06 10:48:52

MySQLElasticsear數(shù)據(jù)庫(kù)

2020-03-04 14:05:35

戴爾

2021-01-03 17:14:16

ORMObjective S運(yùn)行

2021-05-19 09:37:45

SessionTokencookie

2024-08-09 08:52:26

2025-04-02 08:47:23

DOM文檔結(jié)構(gòu)API

2021-12-17 15:05:55

CSSwhenelse

2024-10-11 16:34:22

2015-03-04 10:49:30

2020-07-30 09:10:21

DockerK8s容器

2020-12-25 09:07:38

EclipseCode工具

2022-09-13 17:54:55

CSS定時(shí)器監(jiān)聽(tīng)事件

2022-02-09 15:02:01

ideadocker遠(yuǎn)程熱部署

2021-10-10 22:02:25

比特幣區(qū)塊鏈科技

2011-05-04 13:28:07

噴墨打印機(jī)供墨

2021-05-23 07:25:40

IDEAJrebel部署插件

2022-11-14 18:43:03

JSCSS節(jié)流
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)