1. 程式人生 > > 不用重啟Tomcat服務實現修改Java檔案後自動部署

不用重啟Tomcat服務實現修改Java檔案後自動部署

可以修改類不用重啟Tomcat載入整個專案(手工啟動) 
1.配置reloadable=true(自動過載) 
2.使用Debug模式,前提是僅限於區域性修改。(修改類不用重啟--熱載入) 
在使用Eclipse+Tomcat開發Java專案的時候常常會碰到這樣的情況,已修改Java檔案Tomcat就會自動重啟,接下來就是漫長的等待服務重啟完畢。那其實大多數的Java檔案修改是沒有必要重啟服務的,只有一些特定的Java檔案,比如說只有重啟服務的時候才會呼叫的Java程式碼才需要重啟服務。 
一修改java程式碼就重新部署(console有明顯提示),且會話失效,設定伺服器為debug模式(debug _disibledevent=>Tomcat會停止web app並釋放記憶體,然後重新載入web app.這實在是個耗時的工程. 如果能有隻過載某幾個類的功能,將極大的滿足我這個即時除錯狂。 
1.修改類不重啟Tomcat(不用手動重啟) 
首先需要設定server.xml中的Context reloadable="true", true自動過載(不是重啟!), false手動過載。(如果專案在Tomcat中,應該去Tomcat目錄設定。) 
Eclipse EE 設定方式,檔案設定:server.xml > reloadable="false" 介面設定:Server > Modules > Edit > webapp > Auto reloading enabled > false 
開發階段通常都設為true,方便開發,在釋出階段應該設定為false,提高應用程式的訪問速度。可以選擇把其他不相關的專案先從webapps移出,這樣tomcat載入的專案就少了,相應也就快了。 
2.修改類不重啟Tomcat有兩種方式:熱部署、熱載入 
熱部署:容器狀態在執行時重新部署整個專案。這種情況下一般整個記憶體會清空,重新載入,這種方式可能會造成sessin丟失等情況。tomcat 6確實可以熱部署了,而且會話也沒丟. 
熱載入:最好是在除錯過程中使用,免得整個專案載入,Debug模式支援熱載入。容器狀態在執行時重新載入改變編譯後的類。在這種情況下記憶體不會清空,sessin不會丟失,但容易造成記憶體溢位,或者找不到方法。 
一般改變類的結構和模型就會有異常,在已經有的變數和方法中改變是不會出問題的(Eclipse、MyEclipse8、JBuilder、IntelliJ IDEA…)。 
3.自動編譯JSP 
build Automatically 
修改Tomcat原始碼實現realoadable!不推薦 
具體操作: 
修改Java程式碼不讓服務重啟的方法有兩個: 
1、修改Tomcat的配置檔案(tomcat-5.5.20\conf\Catalina\localhost目錄下) 
在配置中加入 reloadable="false" 
<Context path="/" 
reloadable="false" 
docBase="F:\workspace\shpm3\shpm3-web" 
workDir="F:\workspace\shpm3\work" /> 
2、也可以通過Eclipse上設定實現上述配置檔案的修改 
Eclipse的工程名右鍵: properties->Tomcat->General->Make this context as reloadable(reloadable="true")不要選中 
Eclipse的工程名右鍵:Tomcat project->Update Context Definition