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

          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來說,主要是配置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開發中,會出現異常,建議不要使用這種方法,而是使用第一種方法使用JRebel

           

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

           

          第三步:測試是否有效了

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

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

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

                 {

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

                     return true;

                 }

          clip_image004

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

           

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

           

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

           

          順利寫于20091114



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

          最后弱弱地說一下,如果可以的話,轉載請提供出處( ),謝謝。
          posted on 2010-01-07 21:19 李順利 閱讀(4958) 評論(0)  編輯  收藏

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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 麻城市| 永宁县| 七台河市| 武功县| 土默特右旗| 当涂县| 周至县| 棋牌| 宁乡县| 维西| 民勤县| 包头市| 神农架林区| 嘉祥县| 绥宁县| 茂名市| 靖安县| 五莲县| 太原市| 鹤山市| 清水河县| 海安县| 桦甸市| 昌乐县| 庆城县| 彭阳县| 新乡县| 兖州市| 呈贡县| 澜沧| 化德县| 盐源县| 和顺县| 永吉县| 长兴县| 临沂市| 通江县| 凉城县| 馆陶县| 灵丘县| 民乐县|