李順利
          隨筆-50  評(píng)論-170  文章-0  trackbacks-0

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

           

           

          關(guān)鍵詞

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

           

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

          1.  JDK

          2.  MyEclipse

          3.  Tomcat

          4.  Struts2

          5.  JavaRebel/JRebel

           

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

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

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

          第一步:修改struts.properties來實(shí)現(xiàn)熱加載Struts2的配置文件

          (注:開發(fā)環(huán)境是在Struts2下)

          src目錄下新建一個(gè)文件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ā)模式、是否國際化信息自動(dòng)加載、是否加載xml配置(true,false),修改后重啟服務(wù)器后,就能體現(xiàn)效果。在我們修改Struts2的配置信息的時(shí)候就不需再重啟服務(wù)器了,而且Struts2的配置還包括include標(biāo)簽(防止配置文件膨脹),例如下面的配置:

          <struts>

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

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

          </struts>

          上面的struts.properties會(huì)對每個(gè)配置文件都產(chǎn)生作用。

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

           

          第二步:解決類的熱加載

           

          方法一:修改MyEclipse 中的Tomcat配置,加入JRebel的應(yīng)用

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

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

          使用配置?

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

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

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

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

          clip_image002

          這一步是為了解決Java類文件熱加載的問題,實(shí)際上,有一個(gè)更簡單的方法吧,并不需要使用JRebel包,而是我們進(jìn)行適當(dāng)?shù)呐渲?/span>

           

          方法二:

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

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

          <Context reloadable = "true">

          </Context>

          注意大小寫

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

           

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

           

          第三步:測試是否有效了

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

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

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

                 {

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

                     return true;

                 }

          clip_image004

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

           

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

           

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

           

          順利寫于20091114



          博客中的一些下載已經(jīng)放到了百度云了,請根據(jù)需要下載。【點(diǎn)我去百度云下載】

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 五华县| 原阳县| 宜宾县| 平乡县| 探索| 曲阳县| 黔西县| 延吉市| 阿勒泰市| 云和县| 竹溪县| 自贡市| 延川县| 秦皇岛市| 泗洪县| 无锡市| 搜索| 方正县| 樟树市| 嘉兴市| 慈溪市| 宁城县| 双江| 三穗县| 分宜县| 榆社县| 通渭县| 邹平县| 新巴尔虎左旗| 康定县| 姜堰市| 梅州市| 宜兰市| 台州市| 潮安县| 龙州县| 昌黎县| 建昌县| 上栗县| 辉县市| 沙坪坝区|