4

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

我已经阅读过将敏感的配置变量外部化到 Config.groovy 之外的 .properties 是否在 Grails 中提供了安全优势?但这是关于使用外部属性文件,我需要将设置存储在数据库中(该应用程序有一个管理界面,带有审计等)。

谢谢你。

4

3 回答 3

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
    }
}

与其自己编写此代码,不如使用动态配置插件来实现相同的结果。

于 2013-10-02T01:39:40.577 回答
2

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

另请参阅数据库中的属性

于 2013-10-02T01:35:18.330 回答
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 类提供有关配置的所有信息。您可以使用以下代码获取电子邮件信息并将其动态更改。

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
  }

}

于 2014-12-19T14:12:30.180 回答