2012-06-01 49 views
2

我正在開發一個應用程序使用Grails,並有一些應用程序範圍的配置設置,我想存儲在某個地方。我想到的唯一方法是創建一個存儲配置值的域類,並使用查詢該域類的服務。我看到的問題是應該只有該域類的一個實例,但我沒有發現任何事情來執行該限制。Grails,存儲應用程序自己的設置(單身域類?)

可能還有其他的最佳實踐來存儲應用程序自己的配置,我可能不知道,所有建議都歡迎。

編輯:設置應該可以在應用程序內進行配置。

+0

假設你真正想要的效果相同要將這些信息存儲在數據庫中,一個領域類很好。我不確定是否有任何實用的方法來執行單例 - 只需創建一個可以查詢的屬性(findByXXXX),併爲該屬性的值使用常量。使用一行預填充數據庫,並且沒有任何代碼可以在應用程序中創建它 - 只需查詢和更新即可。 – GreyBeardedGeek

回答

5

有一個插件爲:Settings。它允許您創建不同類型(字符串,日期,BigDecimal和整數)的名稱設置,如my.own.x,併爲您提供基本的CRUD頁面以管理它們。

您可以從普惠制訪問設置:

<g:setting valueFor="my.own.x" default="50" encodeAs="HTML"/> 

或控制器/服務/域

Setting.valueFor("my.own.x", 50) 

我使用的幾個項目,並認爲它的偉大工程。

7

有特殊的地方:/grails-app/conf/Config.groovy。您可以添加值有喜歡:

my.own.x=1 

,並通過讀取值:

def x = grailsApplication.config.my.own.x 

見文檔的更多細節:http://grails.org/doc/latest/guide/conf.html#config

+0

這很酷,但我忘了提及這些參數應該可以在應用程序內配置。 –

+0

如果只是環境特定的,你可以將它存儲在''environment''塊中。否則,在數據庫中,如果它應該由網站管理員修改,或者其他。 –

0

如果您使用1.3。*,您可以嘗試grails動態配置插件(http://www.grails.org/plugin/dynamic-config)。 「這個插件爲應用程序提供了在不重新啓動應用程序的情況下改變配置屬性的能力,當運行應用程序時,Config.groovy中的值在數據庫中保存下來 - 這是安裝插件後第一次。」

我已經從未在grails 2.0。*項目中使用過它。

2

您可以強制通過自定義驗證你的單域類數據庫條目:

// No more than one entry in DB 
class MasterAccount { 
    boolean singleEntry = true 
    static constraints = { 
     singleEntry nullable: false, validator: { val, obj -> 
       if(val && obj.id != getMasterAccount()?.id && MasterAccount.count > 0){ 
        return "Master account already exists in database" 
       } 
     } 
    } 
    MasterAccount static getMasterAccount(){ 
     MasterAccount.list()?.first() 
    } 
} 

可以推遲它的配置和持久性Bootstrap.groovy,這將實現爲Config.groovy

相關問題