在Grails应用程序的数据库中存储和使用应用程序配置设置?

在Grails应用程序的数据库中存储和使用应用程序配置设置?,grails,configuration,gorm,Grails,Configuration,Gorm,我们目前使用配置文件来存储应用程序设置。我想知道是否可以将这些设置存储在数据库中,如果可以,如何实现 问候语您可以在数据库中存储您想要的任何内容,并使用域类将其读出。如果您希望能够在无需重新部署新代码的情况下对内容进行更改,这一点尤其有用。但是要意识到,每次访问该属性时,都会导致数据库命中 您可以使用以下设置ConfigurationService: ConfigurationService { static def configurationValues def getCon

我们目前使用配置文件来存储应用程序设置。我想知道是否可以将这些设置存储在数据库中,如果可以,如何实现


问候语

您可以在数据库中存储您想要的任何内容,并使用域类将其读出。如果您希望能够在无需重新部署新代码的情况下对内容进行更改,这一点尤其有用。但是要意识到,每次访问该属性时,都会导致数据库命中

您可以使用以下设置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“

这可以通过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)

在我的例子中,有一组配置设置,我更喜欢在数据库中设置。例如,用于发送电子邮件的用户名/密码组合,用于加密哈希的秘密密码等。。我知道我可以缓存特定的域类,但正如您所说,每当我更改配置时,我都想重新初始化缓存,并尽可能跳过数据库命中。但这正是Jarreds建议所做的。@david我添加代码是为了为Marco的上述评论提供一个示例。我同意可以完成初始化在BootStrap.groovy中。但是在那里创建配置选项并不能解决问题,因为您必须部署新代码才能更改任何值。这与使用Config.groovy的陷阱相同。此外,您还必须确定您所处的环境(这并不困难),但基本上与Config.groovy提供的环境相同。