Grails:Config.groovy中的设置可以在运行时以编程方式覆盖吗?

时间:2013-10-02 01:31:58

标签: grails

邮件插件documented需要在Config.groovy中进行设置。我想将它存储在数据库中,以便在运行时更改它。这只是一个例子。

我已阅读Does externalizing sensitive config variables into a .properties outside of Config.groovy provide a security advantage in Grails?但这是关于使用外部属性文件,我需要将设置存储在数据库中(该应用具有管理界面,具有审核功能等)。

谢谢。

3 个答案:

答案 0 :(得分:6)

Bootstrap.groovy中,您可以从数据库中读取属性值,并通过更新grailsApplication.config来替换从配置文件中读取的属性值。例如,假设您要替换名为foo.bar

的配置属性的值
class BootStrap {

    GrailsApplication grailsApplication

    def init = { servletContext ->

        def fooBarDB = // read the value of foo.bar from the database
        grailsApplication.config.foo.bar = fooBarDB
    }
}

您可以改为使用Dynamic Config Plugin来实现相同的结果,而不是自己编写此代码。

答案 1 :(得分:2)

是的,你可以这样做。在使用Bootstrap.groovy的grails引导过程中,从数据库中检索属性并覆盖它们。它类似于属性文件覆盖,您只需将它们存储在数据库中。

另见Properties in the database

答案 2 :(得分:1)

改变价值动态的第一种方法:

grailsApplication.config.grails.mail.put("port",your database fetch value of port)
grailsApplication.config.grails.mail.put("username","your database fetch value of username")
grailsApplication.config.grails.mail.put("password","your database fetch value of username")
grailsApplication.config.grails.mail.put("props","your database fetch value of username")

改变价值动态的第二种方式:

org.codehaus.groovy.grails.commons.DefaultGrailsApplication

DefaultGrailsApplication类提供有关config的所有信息。您可以使用以下代码获取电子邮件信息并进行动态更改。

def defaultGrailsApplication= new DefaultGrailsApplication()

// to get mails information from Config.groovy
defaultGrailsApplication?.config?.grails.mail?.get("host")
defaultGrailsApplication?.config?.grails.mail?.get("port")
defaultGrailsApplication?.config?.grails.mail?.get("username")
defaultGrailsApplication?.config?.grails.mail?.get("password")
defaultGrailsApplication?.config?.grails.mail?.get("props")


// to change mails information of Config.groovy
defaultGrailsApplication?.config?.grails.mail?.put("host","your database fetch value of host")
defaultGrailsApplication?.config?.grails.mail?.put("port",your database fetch value of port)
defaultGrailsApplication?.config?.grails.mail?.put("username","your database fetch value of username")
defaultGrailsApplication?.config?.grails.mail?.put("password","your database fetch value of username")
defaultGrailsApplication?.config?.grails.mail?.put("props","your database fetch value of username")

现在您需要分配此" defaultGrailsApplication" 实例以注入应用程序的价值。假设我们有一个类服务Temp.service注入了grailsApplication,如:

Temp.service

class Temp{
  def grailsApplication

  def your method(){
         please add above code for set value
         grailsApplication = defaultGrailsApplication
  }

}

相关问题