2013-10-02 4 views
4

Почтовый плагин: documented, чтобы потребовать его настройки в Config.groovy. Я хочу, чтобы он хранился в базе данных, чтобы его можно было изменить во время выполнения. И это всего лишь один пример.Grails: можно ли настроить параметры Config.groovy программно во время выполнения?

Я читал Does externalizing sensitive config variables into a .properties outside of Config.groovy provide a security advantage in Grails?, но это касается использования внешнего файла свойств, мне нужно сохранить настройки в базе данных (приложение имеет интерфейс администратора, с аудитом и т. Д.).

спасибо.

+0

возможно дубликат [Свойства в базе данных] (http://stackoverflow.com/questions/15947021/properties -in-the-database) –

ответ

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 для достижения того же результата.

+0

Можно ли сделать это за пределами Bootstrap? – Rafael

+0

@ Rafael Да, вы можете поместить этот код в любом месте –

2

Да, вы можете это сделать. Во время процесса загрузки grails с использованием Bootstrap.groovy извлекайте свойства из базы данных и переопределите их. Это похоже на переопределение файлов свойств, вы просто храните их в базе данных.

Также см Properties in the database

+0

Спасибо. Ваш ответ такой же, как у Дона, но он был впереди с несколькими минутами. – wishihadabettername

+3

Мне все равно, кто принимает это предложение, так как цель состоит в том, чтобы обеспечить hlep, но я думаю, вам нужно перепроверить время ... –

+0

Возможно ли это сделать за пределами Bootstrap? – Rafael

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 
    } 

}

+0

Первый способ не работает для меня ... по крайней мере, вне бутстрапа ... это сработало для вас? – Rafael

Смежные вопросы