2012-11-26 38 views
1

我在控制器中使用request.getServerName(),但我將我的功能轉移到服務中。我如何找到應用程序運行的主機名?如何從服務方法中找到我的Grails應用程序所在的主機名?

+0

如果您正在部署到雲服務,祝您獲得可靠的東西。另一方面,如果您使用已知主機部署到已知服務器,則只需在配置中指定它們,而不嘗試動態查找它們。只需從Config中取出名稱即可。 – Gregg

+0

你可以舉一個例子來設置開發vs配置的靜態路徑在配置?我會標記你的答案。 –

+0

(在配置中設置,然後從服務方法中讀取...) –

回答

1

如果您知道該服務方法將只從一個控制器動作叫那麼你可以使用Spring RequestContextHolder才能到當前GrailsWebRequest訪問,並從那裏request對象。但是,從控制器傳入request或者簡單地相信grailsApplication.config.grails.serverURL--您理想的情況是服務不應直接依賴於Web層類。

如果您在不能使用注入grailsApplication(構造函數,字段初始值設定項或靜態方法/閉包)的上下文中需要此信息,則可以通過grails.util.Holders訪問配置。

+0

我沒有在服務中使用grailsApplication運氣。我將def grailsApplication添加到服務中,但在調用方法時變量爲空。我也可能使用Bootstrap的服務,所以我不想依賴控制器上下文。 –

+0

我認爲伊恩建議有問題的代碼(在服務中)不應該是訪問正在運行的東西的東西。也許通過電話將它傳遞給服務?會使這更多測試能夠這樣做。 – billjamesdev

+0

這是一個很好的方法 - 我一直在嘗試:)但我需要一種方法來獲取BootStrap中的主機名以將其傳遞到服務中。 –

相關問題