Holders.grailsApplication.config在部署到tomcat时为空

Holders.grailsApplication.config在部署到tomcat时为空,grails,Grails,我正在运行Grails2.2.4。以下代码在开发中工作良好。当我将war文件部署到tomcat时,会引发一个异常,即grailsApplication.config为null: import grails.util.Holders public enum PhotoSize { PROFILE(Holders.grailsApplication.config.img.profile.height, Holders.grailsApplication.config.img.profil

我正在运行Grails2.2.4。以下代码在开发中工作良好。当我将war文件部署到tomcat时,会引发一个异常,即grailsApplication.config为null:

import grails.util.Holders

public enum PhotoSize {

    PROFILE(Holders.grailsApplication.config.img.profile.height, Holders.grailsApplication.config.img.profile.width),
    SEARCH_RESULT(Holders.grailsApplication.config.img.search.height, Holders.grailsApplication.config.img.search.width),
    GALLERY(Holders.grailsApplication.config.img.gallery.full.height, Holders.grailsApplication.config.img.gallery.full.width),
    GALLERY_THUMBNAIL(Holders.grailsApplication.config.img.gallery.thumbnail.height, Holders.grailsApplication.config.img.gallery.thumbnail.width),
    MEMBER_THUMBNAIL(Holders.grailsApplication.config.img.member.thumbnail.height, Holders.grailsApplication.config.img.member.thumbnail.width)

    //def config = Holders.config


     //def grailsApplication
...
我试图通过从Config.groovy加载一些枚举值来设置它们。一种解决方法是对值进行硬编码,因为它们不太可能更改。然而,我很好奇为什么配置文件是空的。另外,是否无法将grailsApplication注入枚举


我正在给Holders.grailsApplication打电话。注入grailsApplication并不能解决问题。

创建枚举值的构造函数调用将作为枚举类型静态初始化的一部分进行。如果这发生在GrailsApplication启动之前,那么您将得到null。在开发模式下,配置在启动过程中的加载时间比作为WAR运行时要早得多(因为它需要可用于命令行脚本)


以不同的方式处理问题可能更好,例如,使用一个服务方法或taglib,该方法或taglib将枚举类型作为参数,并返回从配置中提取的适当维度。

。我打算建议使用
Hodlers.config
而不是
Holders.grailsApplication
,因为config对象是由上下文类加载器加载的。因此,我们不必担心为该操作实例化
grailsApplication
bean?Holders.config优于Holders.grailsApplication在我的场景中工作,我试图从静态方法访问一些配置值。@whitespy9对于一些可能工作的静态方法,这完全取决于在启动过程中调用该方法的确切时间。您是否尝试过使用
Holders.config.img.profile.height
(直接使用config对象而不是引用grailsApplication)?如果你这样做,我想你不会面对这个问题。