2012-01-10 72 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

相关问题