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

时间:2012-12-17 15:58:43

标签: grails groovy static

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

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

public static final String VARIABLE1 = "VARIABLE VALUE"

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

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

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

额外信息:Grails版本2.1.0

1 个答案:

答案 0 :(得分:1)

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

  1. 启动没有-reloading的流程从不允许更新变量 - 因此请从grails -reloadinggrails -reloading run-app

  2. 开始
  3. final个变量在上面启动过程时正确重新加载。因此public static String VARIABLE1 = "VARIABLE VALUE"会在我更新值时重新加载并显示

  4. final个变量不会重新加载。因此public static final String VARIABLE1 = "VARIABLE VALUE"不会重新加载并显示新值。

  5. 我甚至创建了几个变量,一些final而另一些则没有。只要我使用-reloading,非final变量就会重新加载,但final则不会。

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

    在这种情况下,VARIABLE1在重新启动之前不会更改 - VARIABLE2在更新和保存时会发生变化。