Java開發Web程序中修改類文件和配置文件不重啟服務器的方法
關鍵詞
Java Web 開發 類 配置 文件 重啟 服務器 tomcat JavaRebel 熱加載 重新部署 劉長炯
開發環境
1. JDK
2. MyEclipse
3. Tomcat
4. Struts2
5. JavaRebel/JRebel
拜讀了劉長炯老師的Java開發生產力視頻: 不重新部署 Web 模塊熱加載類(JavaRebel) 和 兩招提高Struts2開發生產力(2008.11.14更新)!,從中學得很多,也學習里面的精華,自己實際操作的一下,發現非常有效率,推薦大家閱讀劉長炯老師的這兩篇博文。
大家知道,在我們開發web項目的時候重啟應用服務器是我們最煩惱的事情,每次修改類文件或者配置文件后,我們必須重啟服務器來重新加載,使得我們的修改才能及時的顯現出來,這個時候,我們只能等待服務器的重啟,一般都需要20幾秒,每天重啟服務器的次數多了,我們開發項目的效率就大大折扣了,所以我們要尋找一個高效率開發web項目的方法,劉長炯老師就給我們一個非常好的途徑。
在這里,依著劉長炯老師的思路,我們來個“三步走“
第一步:修改struts.properties來實現熱加載Struts2的配置文件
(注:開發環境是在Struts2下)
在src目錄下新建一個文件struts.properties,打開編輯,加入以下語句
#Whether Struts is in development mode or not
struts.devMode=true
#Whether the localization messages should automatically be reloaded
struts.i18n.reload=true
#Whether to reload the XML configuration or not
struts.configuration.xml.reload=true
上面的語句分別為是否為struts開發模式、是否國際化信息自動加載、是否加載xml配置(true,false),修改后重啟服務器后,就能體現效果。在我們修改Struts2的配置信息的時候就不需再重啟服務器了,而且Struts2的配置還包括include標簽(防止配置文件膨脹),例如下面的配置:
<struts>
<include file="struts-back.xml"></include>
<include file="struts-custom.xml"></include>
</struts>
上面的struts.properties會對每個配置文件都產生作用。
對于上面的測試,我實際上發現:上面的配置在純Struts2開發中,是可以實現對配置文件和國際化文件熱加載功能的,但我在SSH開發中并不能實現功能,而只能實現對國際化的熱加載,不能對配置文件的熱加載。
第二步:解決類的熱加載
方法一:修改MyEclipse 中的Tomcat配置,加入JRebel的應用
既然要使用JRebel,那就要我們下載JRebel,到JRebel的官網上面下載最新的JRebel包,需要說明的是JRebel并非免費的產品,提供30天的試用期限,不過劉長炯老師也提供了破解方法,需要使用的請看JRebel 3.0 M1 破解版下載及破解手記,在這里我就不說如何破解。
下載后解壓,就可以看到jrebel.jar了。
使用配置?
Jrebel的使用一般都依賴于服務器,就那tomcat來說,主要是配置JDK的Optional Java VM arguments(打開Myeclipse中的windows->Preferences->MyEclipse …->Servers->Tomcat->
選擇配置的Tomcat,單擊,展開JDK選項),加入下面的語句
-noverify -javaagent:D:\Jars\jrebel-2.1a\jrebel.jar
說明一下,“-noverify -javaagent:”是固定的,后面加上的是jrebel.jar在你電腦上面的物理路徑,請修改為你的電腦配置,不然不會成功。

這一步是為了解決Java類文件熱加載的問題,實際上,有一個更簡單的方法吧,并不需要使用JRebel包,而是我們進行適當的配置
方法二:
自動加載修改后的項目不需重啟服務器(只對Java文件,對配置文件不可以)
在WebRoot下的META-INF文件夾中新建一個名為context.xml文件,在里面寫
<Context reloadable = "true">
</Context>
注意大小寫
方法二的思想是源自張孝祥老師的講解,不需要修改tomcat的配置,減少tomcat的啟動時間,最重要的是,能夠完成一樣的作用——對Java類進行熱加載,但是有的時候,特別是在SSH開發中,會出現異常,建議不要使用這種方法,而是使用第一種方法使用JRebel。
這兩步下來, 可以在新加入類以及Struts配置修改后, 完全無需重啟或者重新發布即可立即測試! 在JAR包暴多的情況下, 可以讓我們不再等待10到20秒了。
第三步:測試是否有效了
1. 測試類的熱加載(具體的測試請大家完成,我僅貼出我的測試結果)
我在一個已知的登錄系統中,加入一個自己留的后臺用戶,不重啟服務器登錄
if("TestJRebel".equals(operator.getOperatorName()))
{
System.out.println("通過自己留后臺用戶TestJRebel登錄,大家不要這樣哦。");
return true;
}

2. 測試配置文件和i18n文件的熱加載(具體的測試請大家完成)
高效率的開發web程序是我們的追求,謝謝劉長炯老師的博文。
如果有什么問題的話,可以通過Q:506817493 或 E:leeshunli@qq.com,大家一起交流。
順利寫于2009年11月14日
博客中的一些下載已經放到了百度云了,請根據需要下載。【點我去百度云下載】
最后弱弱地說一下,如果可以的話,轉載請提供出處(
),謝謝。
posted on 2010-01-07 21:19
李順利 閱讀(4954)
評論(0) 編輯 收藏