无法从Config.groovy访问外部化的grails.serverURL

时间:2011-05-09 10:26:06

标签: grails groovy

我有一个配置外部化的应用程序。在Config.groovy中,我正在更新

grails.config.locations=[file:/.../myapp-log4j.groovy, file:/.../myapp-config.properties]

适用于数据源等。但后来在Config.groovy,我有:

springws {
    wsdl {
        MyApp {
            // In this case the wsdl will be available at    <grails.serverURL>/services/v1/myapp/myapp-v1.wsdl
            wsdlName= 'myapp-v1'
            xsds= '/WEB-INF/myapp.xsd'
            portTypeName = 'myappPort'
            serviceName = 'myappService'
            locationUri = "${grails.serverURL}/services/v1/myapp"
            targetNamespace = 'http://www..../myapp/v1/definitions'
        }
    }
}

$ {grails.serverURL}包含[:],这不是我配置文件中的内容。配置文件包含(在数据源详细信息中):

grails.serverURL=http://samiel:9011/xid

我的猜测是更新的grails.config.locations仅在我从Config.groovy返回后使用。

那么,根据外部化的serverURL设置我的Web服务详细信息有哪些选择?

1 个答案:

答案 0 :(得分:1)

这是我在运行你的例子时得到的结果(只是确认你的起始位置):

def testExternalConfig() {
  println "grails.serverURL: ${ConfigurationHolder.config.grails.serverURL}"
  println "springws.wsdl.MyApp.locationUri ${ConfigurationHolder.config.springws.wsdl.MyApp.locationUri}"
}

--Output from testExternalConfig--
grails.serverURL: http://samiel:9011/xid
springws.wsdl.MyApp.locationUri http://localhost:8080/soGrails/services/v1/myapp

就像你说的那样,Config.groovy没有看到外部配置中设置的值。我相信Grails处理外部 在Config.groovy之后配置,这个测试似乎证实了这一点。逻辑是你可能有外部配置文件 您希望在war文件中优先于config的值。

修复是覆盖myapp-config.properties中的完整属性:

grails.serverURL=http://samiel:9011/xid
springws.wsdl.MyApp.locationUri=http://samiel:9011/xid/services/v1/myapp

有了这个改变,我得到了这个:

--Output from testExternalConfig--
grails.serverURL: http://samiel:9011/xid
springws.wsdl.MyApp.locationUri http://samiel:9011/xid/services/v1/myapp