2014-09-04 57 views
0

我在src/groovy下有一個文件,我有一些屬性位於Config.groovy和外部屬性文件中。通常如果你想訪問屬性,可以使用grailsApplication.configuration.property.name表達式。我希望能夠從src/groovy目錄下的此文件訪問所有這些屬性。我到目前爲止已經試過訪問來自src/groovy的配置/屬性文件

import grails.util.Holders 

class ForkedTomcatCustomizer { 

    def application 

    void customize(Tomcat tomcat) { 

     println Holders.grailsApplication.config.property.name 
    } 
} 

給我NPE說grailsAppliction爲空

import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH 
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes as GA 



class ForkedTomcatCustomizer { 

    def application 

    void customize(Tomcat tomcat) { 

     def ctx = SCH.servletContext.getAttribute(GA.APPLICATION_CONTEXT) 
     def grailsAppliction = ctx.grailsApplication.getObject() 
     println grailsAppliction.config.property.name 
    } 
} 

相同 - NPE因爲grailsAppliction爲空

是否有可能以某種方式處理這種情況?謝謝!

回答

0

使用下面,看看它是否工作

println Holders.config.property.name 

使用支座當你不需要grailsApplication。

+0

不幸的是這給NPE爲好。說配置對象爲空 – 2014-09-04 07:58:40

+0

@AndreyYaskulsky - 這很奇怪!我一直在使用這個遍歷我的src文件,它完全適合我。我正在使用grails 2.1.2,不確定,但它可能與版本 – 2014-09-04 08:02:54

+0

有一些關係。我的猜測是他正在嘗試在構造之前訪問配置,例如,在建立時間 – 2014-09-04 08:08:09

0

下面的示例可能比您需要的複雜一點,但它們顯示瞭如何在構建時獲取配置屬性。我用它們來合併兩個配置文件,但你可能不需要這樣做。

這個method在CompileEnd事件中調用here時會返回一個配置屬性。

您可以在應用程序的_Events.groovy文件中定義一個類似的方法來調用您自己的配置持有者類。

0
import org.codehaus.groovy.grails.commons.ConfigurationHolder; 

class KeyAndSecret{ 
    public static String consumerKey = ConfigurationHolder.config.consumerKey; 
    public static String consumerSecret = ConfigurationHolder.config.consumerSecret; 
} 

嘗試這樣