使用jreloader實現tomcat中class檔案的熱部署
在平常的專案開發或專案升級中,經常需要重啟TOMCAT,如果是在本地重啟,則會很耗費時間;如果是在生產上的伺服器重啟,不僅耗費時間,而且會影響系統的使用。如果能夠在升級CLASS檔案的時候,不需要重啟TOMCAT,系統自動載入更新的class,實現熱部署,則不僅能夠節省升級時間,還不會影響系統的使用。
下面將詳細說明使用jreloader在eclipse的TOMCAT和LINUX TOMCAT中實現CLASS檔案熱部署的詳細過程。
1. 下載jreloader
jreloader-0.4.zip
2. eclipse的TOMCAT中實現熱部署
2.1 配置TOMCAT引數
注意:
javaagent這個引數配的是jreloader.jar這個檔案的本地地址
jreloader.dirs這個引數配的是ECLIPSE中TOMCAT的部署地址
-noverify -javaagent:E:\workspace\tomcatHotDeploy\WebContent\WEB-INF\lib\jreloader.jar -Djreloader.dirs=E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tomcatHotDeploy/WEB-INF/classes
2.2 啟動TOMCAT
看啟動日誌
說明jreloader配置成功。
2.3 關閉TOMCAT reload
2.4 啟動TOMCAT
2.5 驗證熱部署
(1) 訪問測試地址
TOMCAT打印出日誌
(2) 修改日誌輸出為login2
可以看出jreloader會去重新載入LoginController這個class檔案,但TOMCAT本身不會重新啟動。
(3) 再次訪問測試地址
發現後臺打印出日誌login2
3. LINUX的TOMCAT中實現熱部署
3.1 修改指令碼檔案catalina.sh
/local/apache-tomcat-7.0.81/bin/catalina.sh
在cygwin=false上面一行新增JVM引數配置
JAVA_OPTS='-Xms256m -Xmx512m -noverify-javaagent:/local/apache-tomcat-7.0.81/webapps/tomcatHotDeploy/WEB-INF/lib/jreloader.jar-Djreloader.dirs=/local/apache-tomcat-7.0.81/webapps/tomcatHotDeploy/WEB-INF/classes'
注意:javaagent的值是jreloader.jar這個檔案的地址,jreloader.dirs配置的是專案classes檔案地址。
3.2 啟動TOMCAT
打印出jreloader的啟動日誌,說明配置成功
3.3 熱部署驗證
(1) 訪問測試地址
(2) 修改日誌輸出
(3) 再次訪問測試地址
可見jreloader對CLASS檔案LoginController.class進行重新載入,但TOMCAT並沒有重新啟動。
4.專案原始碼下載地址
5.總結
jreloader確實可以實現CLASS檔案的熱部署,但也存在一些缺陷,比如不能實現配置檔案的熱部署,除非載入該配置檔案的CLASS也做了更新。但由於平常配置檔案的改動比較少,JAVA檔案的改動比較頻繁,所以jreloader基本上可以滿足專案開發或升級的熱部署需求。