邮件插件被记录为需要在 Config.groovy 中进行设置。我想将它存储在数据库中,以便可以在运行时进行更改。这只是一个例子。
我已经阅读过将敏感的配置变量外部化到 Config.groovy 之外的 .properties 是否在 Grails 中提供了安全优势?但这是关于使用外部属性文件,我需要将设置存储在数据库中(该应用程序有一个管理界面,带有审计等)。
谢谢你。
邮件插件被记录为需要在 Config.groovy 中进行设置。我想将它存储在数据库中,以便可以在运行时进行更改。这只是一个例子。
我已经阅读过将敏感的配置变量外部化到 Config.groovy 之外的 .properties 是否在 Grails 中提供了安全优势?但这是关于使用外部属性文件,我需要将设置存储在数据库中(该应用程序有一个管理界面,带有审计等)。
谢谢你。
您可以从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
}
}
与其自己编写此代码,不如使用动态配置插件来实现相同的结果。
是的,你可以这样做。在使用 的 grails 引导过程中Bootstrap.groovy
,从数据库中检索属性并覆盖它们。它类似于属性文件覆盖,您只是将它们存储在数据库中。
另请参阅数据库中的属性
改变价值动态的第一种方法:
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
}
}