2013-10-02 119 views
4

郵件插件是documented要求在Config.groovy中進行設置。我想將它存儲在數據庫中,以便在運行時更改它。這只是一個例子。Grails:Config.groovy中的設置可以在運行時以編程方式覆蓋嗎?

我讀過Does externalizing sensitive config variables into a .properties outside of Config.groovy provide a security advantage in Grails?,但這是關於使用外部屬性文件,我需要將設置存儲在數據庫中(應用程序具有管理界面和審計等)。

謝謝。

+0

[數據庫屬性](可能重複http://stackoverflow.com/questions/15947021/properties在數據庫中) –

回答

6

Bootstrap.groovy你可以從數據庫中讀取的屬性值,並通過更新grailsApplication.config取代那些從配置文件中讀取。例如,假設你想更換一個配置屬性的值,命名爲foo.bar

class BootStrap { 

    GrailsApplication grailsApplication 

    def init = { servletContext -> 

     def fooBarDB = // read the value of foo.bar from the database 
     grailsApplication.config.foo.bar = fooBarDB 
    } 
} 

而不是自己編寫這些代碼,你可以改用Dynamic Config Plugin來實現相同的效果。

+0

Bootstrap之外可以做到嗎? – Rafael

+0

@Rafael是的,你可以把這段代碼放在任何地方 –

2

是的,你可以做到這一點。在使用Bootstrap.groovy的grails引導過程中,從數據庫檢索屬性並重寫它們。它與屬性文件覆蓋類似,只是將它們存儲在數據庫中。

另見Properties in the database

+0

謝謝。你的答案和唐的一樣,但是他提前幾分鐘。 – wishihadabettername

+3

我並不在意誰會得到接受,因爲目標是提供hlep,但我認爲您應該重新檢查時間... –

+0

是否可以在Bootstrap之外做到這一點? – Rafael

1

改變值動態第一種方式:

grailsApplication.config.grails.mail.put("port",your database fetch value of port) 
grailsApplication.config.grails.mail.put("username","your database fetch value of username") 
grailsApplication.config.grails.mail.put("password","your database fetch value of username") 
grailsApplication.config.grails.mail.put("props","your database fetch value of username") 

第二種方式改變值動態:

org.codehaus.groovy.grails.commons.DefaultGrailsApplication 

DefaultGrailsApplication類提供所有有關的配置信息。您可以使用以下代碼獲取電子郵件信息並將其更改爲動態。

def defaultGrailsApplication= new DefaultGrailsApplication() 

// to get mails information from Config.groovy 
defaultGrailsApplication?.config?.grails.mail?.get("host") 
defaultGrailsApplication?.config?.grails.mail?.get("port") 
defaultGrailsApplication?.config?.grails.mail?.get("username") 
defaultGrailsApplication?.config?.grails.mail?.get("password") 
defaultGrailsApplication?.config?.grails.mail?.get("props") 


// to change mails information of Config.groovy 
defaultGrailsApplication?.config?.grails.mail?.put("host","your database fetch value of host") 
defaultGrailsApplication?.config?.grails.mail?.put("port",your database fetch value of port) 
defaultGrailsApplication?.config?.grails.mail?.put("username","your database fetch value of username") 
defaultGrailsApplication?.config?.grails.mail?.put("password","your database fetch value of username") 
defaultGrailsApplication?.config?.grails.mail?.put("props","your database fetch value of username") 

現在你需要指定這個「defaultGrailsApplication」實例注入的應用價值。只是假設,我們有grailsApplication注入像一個一流的服務Temp.service:

Temp.service 

class Temp{ 
    def grailsApplication 

    def your method(){ 
     please add above code for set value 
     grailsApplication = defaultGrailsApplication 
    } 

}

+0

第一種方法不適用於我......至少在bootstrap之外......它對你有用嗎? – Rafael

相關問題