Grails,存储应用程序自己的设置(单例域类?)

时间:2012-06-01 17:25:47

标签: grails configuration gorm

我正在使用Grails开发一个应用程序,并且我想在某个地方存储一些应用程序范围的配置设置。我想到的唯一方法是创建一个存储配置值的域类,并使用查询该域类的服务。我看到的问题是该域类应该只有一个实例,但我没有找到任何强制执行该限制的内容。

可能还有其他最佳做法来存储我可能不知道的应用程序自己的配置,欢迎提出所有建议。

编辑:设置应该可以从应用程序中进行配置。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

有一个插件:Settings。它允许您创建不同类型的my.own.x命名设置(字符串,日期,BigDecimal和整数),并为您提供管理它们的基本CRUD页面。

您可以从gsp:

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

或controllers / services / domains

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

我在几个项目中使用它并认为它很有效。

答案 2 :(得分:2)

您可以通过自定义验证程序强制执行单域类db条目:

// 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相同的效果

答案 3 :(得分:0)

如果您使用1.3。*,可以尝试使用grails dynamic-config插件(http://www.grails.org/plugin/dynamic-config)。 “这个插件使您的应用程序能够在不重新启动应用程序的情况下更改配置属性。在安装插件后第一次运行应用程序时,Config.groovy中的值将保留在数据库中。”

我从未在grails 2.0。*项目中使用它。