5

我有一个通过 grails 交互模式运行的 grails 应用程序。此应用程序包含服务、tagLibs、gsps 等,但最重要的是它包含 src/groovy 文件夹中的 groovy 文件。

其中一个 groovy 文件称为AppConstants.groovy并包含大量静态变量,即

public static final String VARIABLE1 = "VARIABLE VALUE"

在非交互模式下运行它时,我没有遇到任何问题,对此变量所做的任何更新都会在下次部署时反映在正在运行的应用程序中。然而,在交互模式下,对变量所做的任何更改VARIABLE1都不会反映在应用程序中,即使您调用exit和 也是如此run-app。要反映更改 必须退出并重新启动交互模式。

起初我认为这可能是一个缓存问题,并且我的静态最终变量正在被缓存,并且由于 JVM 没有重新启动,所以这个缓存永远不会被更新。然而,我注意到添加一个新变量,一个以前从未存在于应用程序中的变量,在重新启动交互模式之前对我的应用程序的其余部分不可用。

任何想法这背后的原因是什么?该类正在编译,因为我可以在交互式控制台中看到这一点,因此人们希望任何更改都会反映在应用程序中,不一定是在它运行时,但至少exit后跟一个run-app.

额外信息:Grails 2.1.0 版

4

1 回答 1

1

做了一些测试,这是我发现的:

  1. 启动过程,但-reloading绝不允许更新变量 - 所以开始为grails -reloadinggrails -reloading run-app

  2. final如上所述启动过程时,非变量将正确重新加载。当我public static String VARIABLE1 = "VARIABLE VALUE"更新值时重新加载并显示

  3. final变量不会重新加载。所以public static final String VARIABLE1 = "VARIABLE VALUE"不会重新加载并显示新的价值。

我什至创建了几个变量,final有些没有。只要我使用-reloadingfinal变量就会重新加载但final不会。

public static final String VARIABLE1 = "VARIABLE VALUE"
public static String VARIABLE2 = "NON FINAL VARIABLE VALUE"

在这种情况下VARIABLE1,直到重新启动才会更改 -VARIABLE2更新和保存时更改。

于 2012-12-18T20:21:52.767 回答