Grails交互模式中的静态字符串

Jon*_*lor 5 grails groovy static

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

其中一个groovy文件叫做AppConstants.groovy,包含许多静态变量,即

public static final String VARIABLE1 = "VARIABLE VALUE"
Run Code Online (Sandbox Code Playgroud)

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

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

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

额外信息:Grails版本2.1.0

Kel*_*lly 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"
Run Code Online (Sandbox Code Playgroud)

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