李順利
          隨筆-50  評論-170  文章-0  trackbacks-0

          Java開發(fā)Web程序中修改類文件和配置文件不重啟服務器的方法

           

           

          關鍵詞

          Java Web 開發(fā) 配置 文件 重啟 服務器 tomcat JavaRebel 熱加載 重新部署 劉長炯

           

          開發(fā)環(huán)境

          1.  JDK

          2.  MyEclipse

          3.  Tomcat

          4.  Struts2

          5.  JavaRebel/JRebel

           

          拜讀了劉長炯老師的Java開發(fā)生產力視頻: 不重新部署 Web 模塊熱(JavaRebel) 兩招Struts2開發(fā)生產力(2008.11.14更新)!,從中學得很多,也學習里面的精華,自己實際操作的一下,發(fā)現非常有效率,推薦大家閱讀劉長炯老師的這兩篇博文。

          大家知道,在我們開發(fā)web項目的時候重啟應用服務器是我們最煩惱的事情,每次修改類文件或者配置文件后,我們必須重啟服務器來重新加載,使得我們的修改才能及時的顯現出來,這個時候,我們只能等待服務器的重啟,一般都需要20幾秒,每天重啟服務器的次數多了,我們開發(fā)項目的效率就大大折扣了,所以我們要尋找一個高效率開發(fā)web項目的方法,劉長炯老師就給我們一個非常好的途徑。

          在這里,依著劉長炯老師的思路,我們來個“三步走“

          第一步:修改struts.properties來實現熱加載Struts2的配置文件

          (注:開發(fā)環(huán)境是在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開發(fā)模式、是否國際化信息自動加載、是否加載xml配置(true,false),修改后重啟服務器后,就能體現效果。在我們修改Struts2的配置信息的時候就不需再重啟服務器了,而且Struts2的配置還包括include標簽(防止配置文件膨脹),例如下面的配置:

          <struts>

              <include file="struts-back.xml"></include>

              <include file="struts-custom.xml"></include>

          </struts>

          上面的struts.properties會對每個配置文件都產生作用。

          對于上面的測試,我實際上發(fā)現:上面的配置在純Struts2開發(fā)中,是可以實現對配置文件和國際化文件熱加載功能的,但我在SSH開發(fā)中并不能實現功能,而只能實現對國際化的熱加載,不能對配置文件的熱加載。

           

          第二步:解決類的熱加載

           

          方法一:修改MyEclipse 中的Tomcat配置,加入JRebel的應用

          既然要使用JRebel,那就要我們下載JRebel,到JRebel的官網上面下載最新的JRebel包,需要說明的是JRebel并非免費的產品,提供30天的試用期限,不過劉長炯老師也提供了破解方法,需要使用的請看JRebel 3.0 M1 破解版下載及破解手記,在這里我就不說如何破解。

          下載后解壓,就可以看到jrebel.jar了。

          使用配置?

          Jrebel的使用一般都依賴于服務器,就那tomcat來說,主要是配置JDKOptional Java VM arguments(打開Myeclipse中的windows->Preferences->MyEclipse …->Servers->Tomcat->

          選擇配置的Tomcat,單擊,展開JDK選項),加入下面的語句

          -noverify -javaagent:D:\Jars\jrebel-2.1a\jrebel.jar

          說明一下,“-noverify -javaagent:”是固定的,后面加上的是jrebel.jar在你電腦上面的物理路徑,請修改為你的電腦配置,不然不會成功。

          clip_image002

          這一步是為了解決Java類文件熱加載的問題,實際上,有一個更簡單的方法吧,并不需要使用JRebel包,而是我們進行適當的配置

           

          方法二:

          自動加載修改后的項目不需重啟服務器(只對Java文件,對配置文件不可以)

          WebRoot下的META-INF文件夾中新建一個名為context.xml文件,在里面寫

          <Context reloadable = "true">

          </Context>

          注意大小寫

          方法二的思想是源自張孝祥老師的講解,不需要修改tomcat的配置,減少tomcat的啟動時間,最重要的是,能夠完成一樣的作用——對Java類進行熱加載,但是有的時候,特別是在SSH開發(fā)中,會出現異常,建議不要使用這種方法,而是使用第一種方法使用JRebel。

           

          這兩步下來, 可以在新加入類以及Struts配置修改后, 完全無需重啟或者重新發(fā)布即可立即測試! JAR包暴多的情況下, 可以讓我們不再等待1020秒了。

           

          第三步:測試是否有效了

          1.       測試類的熱加載(具體的測試請大家完成,我僅貼出我的測試結果)

          我在一個已知的登錄系統(tǒng)中,加入一個自己留的后臺用戶,不重啟服務器登錄

          if("TestJRebel".equals(operator.getOperatorName()))

                 {

                     System.out.println("通過自己留后臺用戶TestJRebel登錄,大家不要這樣哦。");

                     return true;

                 }

          clip_image004

          2.       測試配置文件和i18n文件的熱加載(具體的測試請大家完成)

           

          高效率的開發(fā)web程序是我們的追求,謝謝劉長炯老師的博文。

           

          如果有什么問題的話,可以通過Q506817493 E:leeshunli@qq.com,大家一起交流。

           

          順利寫于20091114



          博客中的一些下載已經放到了百度云了,請根據需要下載。【點我去百度云下載】

          最后弱弱地說一下,如果可以的話,轉載請?zhí)峁┏鎏? ),謝謝。
          posted on 2010-01-07 21:19 李順利 閱讀(4966) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 霍城县| 吉安县| 开鲁县| 沂水县| 平江县| 永清县| 巫溪县| 平谷区| 深州市| 吉林省| 齐河县| 东方市| 龙井市| 云梦县| 乳山市| 合江县| 增城市| 永嘉县| 延庆县| 灵台县| 商水县| 化州市| 邢台市| 定结县| 铅山县| 且末县| 韶关市| 邢台县| 北碚区| 房山区| 资阳市| 化德县| 忻城县| 合作市| 宣恩县| 湘潭县| 祁连县| 峨山| 道真| 杂多县| 栾城县|