在grails应用程序中在运行时修改groovy代码

时间:2010-05-03 19:44:12

标签: tomcat grails groovy

当我使用嵌入式jetty服务器(tomcat for grails 1.2)运行我的grails应用程序时,我可以在运行时即时更改我的控制器,服务和其他java文件,而无需重新启动应用程序。如何在我的Tomcat(或任何服务器)上部署的应用程序上实现相同的功能。我观察到webapps下的爆炸war文件夹有gsp文件,但没有groovy文件。

3 个答案:

答案 0 :(得分:9)

完成Eric的回答,您无法动态更改生产环境中的源代码。但是,如果您真的想要在现场修改代码,可以:

  1. 更改groovy类,编译它,替换爆炸的war文件夹中的.class文件并重新启动tomcat(我知道,这很痛苦,但我不知道更好的方法)
  2. 对于gsp文件,有一个技巧。将以下属性添加到 Config.groovy 文件中:grails.gsp.enable.reload=true。这将允许您动态更改您的gsp文件。小心,因为它会损害性能。有关详细信息,请参阅here

答案 1 :(得分:3)

将应用程序打包为WAR时,Groovy文件将编译为Java字节码(.class文件)并包含在WAR中。由于内存泄漏,在运行时热插拔文件不适合生产使用。

答案 2 :(得分:1)

是否特定于Spring / Grails的permgen问题,或者在精简的Tomcat / Groovlet设置中是否同样适用?

在性能方面,编译Groovy文件与非编译文件没有任何好处,对吗?编译步骤是为了让Java和Groovy一起工作吗?

我希望在不久的将来,我们将拥有一个表现良好的完全可重新加载的生产环境,并且没有内存泄漏。

Grails&amp ;; Rails都没有提供可行的生产重新加载选项(在Grails中,要求早晚的permgen死亡)。 PHP看起来很慢,但数以百万计的Apache / PHP驱动的站点可以快速向用户提供内容。如果我们没有运行Facebook,我们是否应该关注* Rails阵营中警告的性能损失?

从外面看,正在进行的Java permgen问题似乎很荒谬,难道无法解决吗?