gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:46:11 25 4
gpt4 key购买 nike

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

这些 groovy 文件之一称为 AppConstants.groovy 并包含大量静态变量,即

public static final String VARIABLE1 = "VARIABLE VALUE"

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

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

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

额外信息:Grails 版本 2.1.0

最佳答案

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

  • 在没有 -reloading 的情况下启动进程从不允许更新变量 - 所以从 grails -reloading 开始或 grails -reloading run-app
  • final变量将在启动上述过程时正确重新加载。所以public static String VARIABLE1 = "VARIABLE VALUE"当我更新值
  • 时会重新加载并显示
  • 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更新和保存时更改。

    关于grails - Grails 交互模式中的静态字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917545/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com