2010-05-03 71 views
9

當我使用嵌入式jetty服務器(tomcat for grails 1.2)運行我的grails應用程序時,我可以在運行時在運行時更改我的控制器,服務和其他java文件,而無需重新啓動應用程序。我如何才能在部署在Tomcat(或任何服務器)上的應用程序上實現同樣的功能。我觀察到webapps下的爆炸war文件夾有gsp文件,但不是groovy文件。在grails應用程序運行時修改groovy代碼

回答

9

完成Eric的回答,您無法在生產環境中動態更改源代碼。但是,如果你真的想修改代碼,住,您可以:

  1. 更改Groovy類,編譯它,更換後的.class文件中的分解戰爭文件夾,重新啓動Tomcat(我知道,我知道,這是痛苦但我不知道更好的辦法)
  2. 對於gsp文件,有一個技巧。添加到您的Config.groovy文件以下屬性:grails.gsp.enable.reload=true。這將允許您在飛行中更改您的gsp文件。小心,因爲它會損害性能。有關詳細信息,請參見here
3

將應用程序打包爲WAR時,Groovy文件被編譯爲Java字節碼(.class文件)幷包含在WAR中。由於內存泄漏,在運行時熱交換文件不適合生產使用。

1

是Spring/Grails特有的permgen問題,還是在精簡的Tomcat/Groovlet設置中同樣適用?

從性能角度看,編譯的Groovy文件與非編譯的正確性沒有任何好處?編譯步驟僅僅是爲了讓Java和Groovy一起工作?

我希望在不太遙遠的將來,我們將擁有一個完全可重新加載的生產環境,它性能良好,沒有內存泄漏。

看起來很愚蠢,Grails & Rails都沒有提供可行的生產重載選項(在Grails中,要求早日或晚些時候的permgen死亡)。 PHP看起來很慢,而且數以百萬計的Apache/PHP驅動的站點可以快速地向用戶提供內容。如果我們沒有運行Facebook,我們是否應該關注我們在* Rails陣營中提醒的性能處罰?

從外部看,正在進行的Java permgen問題看起來很荒謬,它不能解決嗎?

相關問題