2011-05-09 32 views
0

我有一個應用程序,其中配置是外部化的。在Config.groovy中,我正在更新外部化的grails.serverURL無法從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服務細節?

回答

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文件中的配置的值。

修復是覆蓋全部財產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 
+0

很不錯的解決方法,它的偉大工程。謝謝。 – 2011-05-12 09:08:06