Grails: is it possible to override Config.groovy parameters at runtime?

The mail plugin is documented to require its configuration in Config.groovy. I want it to be stored in the database so that it can be changed at runtime. And this is just one example.

I read. Is the equalization of sensitive configuration variables in .properties outside Config.groovy providing a security advantage in Grails? , but it concerns the use of an external file property, I need to save the settings in the database (the application has an administrator interface, with auditing, etc.).

Thanks.

+4
source share
3 answers

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 .

+6

, . grails Bootstrap.groovy . , .

.

+2

The first way to change the dynamic value is:

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")

The second way to change the dynamic value:

org.codehaus.groovy.grails.commons.DefaultGrailsApplication

The DefaultGrailsApplication class provides all the information about config. You can receive information by email using the following code and changing it to dynamic.

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")

Now you need to assign this instance of "defaultGrailsApplication" to enter the application value. just suppose we have one service of the Temp.service class with grailsApplication, which is introduced as:

Temp.service

class Temp{
  def grailsApplication

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

}

+1
source

All Articles