2012-01-10 82 views

回答

2

您可以存儲任何你想要的數據庫,並使用域類讀出來。如果您希望能夠在無需重新部署新代碼的情況下對事物進行更改,這一點尤其有用。但要意識到,每次訪問該屬性時都會觸發數據庫。

您可以設置一個ConfigurationService:

ConfigurationService { 
    static def configurationValues 

    def getConfigurationValues() { 
     if(configurationValues == null) { 
      refreshConfigurationValues() 
     } 
     configurationValues 
    } 

    def refreshConfigurationValues() { 
     configurationValues = //go get the values out of the database 
    } 
} 

然後你就可以添加一個控制器/採取強制刷新必要時

ConfigurationController { 

    def configurationService 

    def refreshConfiguration = { 
     configurationService.refreshConfigurationValues() 
     render "Ahhh... That's refreshing :)" 
    } 
} 

現在,您可以通過調用刷新您的配置值: 「http:// yoururl/appName/configuration/refreshConfiguration」

+0

在我的情況下,有一個一堆的配置設置,我寧願在數據庫內。例如用於發送電子郵件的用戶名/密碼組合,用於加密哈希的祕密密碼等。我知道我可以緩存特定的域類,但是當您聲明我希望重新初始化緩存時,只要我進行更改配置並儘可能跳過數據庫命中。 – Marco 2012-01-10 17:40:13

+0

但這就是Jarreds提案所做的。 – david 2012-01-10 21:09:26

+0

@david我添加了代碼來爲Marco的評論提供一個示例。 – 2012-01-11 14:01:18

1

這可以用BootStrap.groovy完成。因此,按照Jarred的回答,創建一個您想要存儲的配置數據的域類,然後在BootStrap.groovy文件中,輸入這些值。這樣做是如果配置值不存在,它會創建它,如果它存在將不會做任何事情。

然後,您可以使用域類訪問您的配置值。我假設你想這樣做,因爲grailsApplication.config ...有時會變得不守規矩。

域級MyConfig.groovy:

class MyConfig { 
    String type 
    String name 
    String value 
} 

BootStrap.groovy中:

def myConfig = MyConfig.findByName("path") ?: new MyConfig(
    type: "Path" 
    name: "path" 
    value: "/var/tmp" 
).save(failOnError: true) 
+0

我同意這個初始化可以在BootStrap.groovy中完成。但是,在那裏創建配置選項並不能解決問題,因爲您必須部署新代碼才能更改任何值。這與使用Config.groovy的陷阱是一樣的。另外,你必須確定你所在的環境(這並不難),但基本上與Config.groovy提供的相同。 – 2012-01-11 14:05:33

相關問題