Grails交互模式下的静态字符串
我有一个通过grails交互模式运行的grails应用程序。该应用程序包含服务、taglib、gsp等,但最重要的是它包含src/groovy文件夹中的groovy文件 其中一个groovy文件名为AppConstants.groovy,包含大量静态变量,例如Grails交互模式下的静态字符串,grails,groovy,static,Grails,Groovy,Static,我有一个通过grails交互模式运行的grails应用程序。该应用程序包含服务、taglib、gsp等,但最重要的是它包含src/groovy文件夹中的groovy文件 其中一个groovy文件名为AppConstants.groovy,包含大量静态变量,例如 public static final String VARIABLE1 = "VARIABLE VALUE" 在非交互模式下运行时,我不会遇到任何问题,对该变量所做的任何更新都会在下次部署时反映在正在运行的应用程序中。但是,在交互模式
public static final String VARIABLE1 = "VARIABLE VALUE"
在非交互模式下运行时,我不会遇到任何问题,对该变量所做的任何更新都会在下次部署时反映在正在运行的应用程序中。但是,在交互模式下,即使您调用exit
和run app
,对VARIABLE1
变量所做的任何更改都不会反映在应用程序中。要反映更改,必须退出并重新启动交互模式
起初,我认为这可能是一个缓存问题,我的静态最终变量正在被缓存,而且由于JVM没有被重新启动,所以这个缓存永远不会被更新。但是,我注意到,添加一个新的变量,一个以前在应用程序中从未存在过的变量,在交互模式重新启动之前,我的应用程序的其余部分无法使用
你知道这背后的原因吗?该类正在编译中,因为我可以在交互控制台中看到这一点,因此人们希望任何更改都会反映在应用程序中,不一定是在应用程序运行时,但至少要先退出,然后运行应用程序
额外信息:Grails 2.1.0版进行了一些测试,以下是我的发现:
的情况下启动流程-重新加载
从不允许更新变量-因此以grails-reloading
或grails-reloading运行应用程序
final
变量将在如上所述启动流程时正确重新加载。因此,public static String VARIABLE1=“VARIABLE VALUE”
会在更新值时重新加载并显示final
变量不会重新加载。因此,公共静态最终字符串VARIABLE1=“VARIABLE VALUE”
不会重新加载并显示新值final
,有些不是。只要我使用-reloading
非final
变量就会重新加载,但final
不会
public static final String VARIABLE1 = "VARIABLE VALUE"
public static String VARIABLE2 = "NON FINAL VARIABLE VALUE"
在这种情况下,
VARIABLE1
在重新启动之前不会更改-VARIABLE2
在更新和保存时会更改。可能交互模式无法看到文件已更改?如果您刚刚运行应用程序,会显示消息“正在编译1个源文件”?是的,正如我提到的,它确实编译了文件,我可以在交互模式下看到它,但是即使在重新编译后,停止并运行应用程序,即使在清理后,它仍然无法识别静态最终字符串的编辑或添加,直到完全重新启动交互模式。感谢您提供的信息,我将等待一段时间,看看是否有其他人有任何输入,以及最终变量的可能解决方案。