我有一个配置被外部化的应用程序。在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
我的猜测是,仅当我从Config.groovy返回后才使用更新的grails.config.locations。
那么,根据外部化的serverURL设置Web服务详细信息有哪些选择?
最佳答案
这是我运行示例时得到的结果(只需确认您的开始位置):
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中的full属性:
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
关于grails - 无法从Config.groovy访问外部化的grails.serverURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5935543/