我正在使用Grails开发一个应用程序,并且我想将一些应用程序范围的配置设置存储在某个地方。我想到的唯一方法是创建一个存储配置值的域类,并使用查询该域类的服务。我看到的问题是该域类应该只有一个实例,但我还没有找到任何可以强制执行该限制的方法。
可能还有其他最佳实践来存储我可能不知道的应用程序自己的配置,欢迎所有建议。
编辑:这些设置应该可以在应用程序中进行配置。
我正在使用Grails开发一个应用程序,并且我想将一些应用程序范围的配置设置存储在某个地方。我想到的唯一方法是创建一个存储配置值的域类,并使用查询该域类的服务。我看到的问题是该域类应该只有一个实例,但我还没有找到任何可以强制执行该限制的方法。
可能还有其他最佳实践来存储我可能不知道的应用程序自己的配置,欢迎所有建议。
编辑:这些设置应该可以在应用程序中进行配置。
有一个特别的地方:/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
有一个插件:设置。它允许您创建my.own.x
不同类型(字符串、日期、BigDecimal 和整数)的命名设置,并为您提供基本的 CRUD 页面来管理它们。
您可以从任一 gsp 访问设置:
<g:setting valueFor="my.own.x" default="50" encodeAs="HTML"/>
或控制器/服务/域
Setting.valueFor("my.own.x", 50)
我在几个项目中使用它并认为它工作得很好。
您可以通过自定义验证器强制执行您的单个域类数据库条目:
// 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
如果您使用的是 1.3.*,您可以尝试 grails 动态配置插件 (http://www.grails.org/plugin/dynamic-config)。“此插件使您的应用程序能够在不重新启动应用程序的情况下更改配置属性。在安装插件后首次运行应用程序时,Config.groovy 中的值会保存在数据库中。”
我从未在 grails 2.0.* 项目中使用过它。