邮件插件documented需要在Config.groovy中进行设置。我想将它存储在数据库中,以便在运行时更改它。这只是一个例子。
我已阅读Does externalizing sensitive config variables into a .properties outside of Config.groovy provide a security advantage in Grails?但这是关于使用外部属性文件,我需要将设置存储在数据库中(该应用具有管理界面,具有审核功能等)。
谢谢。
答案 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引导过程中,从数据库中检索属性并覆盖它们。它类似于属性文件覆盖,您只需将它们存储在数据库中。
答案 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
}
}