如何在不重建Grails中的war文件的情况下更新外部配置文件

时间:2012-11-26 08:30:29

标签: grails configuration-files application-settings

如何在不重建Grails中的war文件的情况下更新外部配置文件(例如:config-ex.groovyconfig-ex.properties)?

重新启动应用程序服务器将从外部配置文件应用新更新。

3 个答案:

答案 0 :(得分:5)

如果我理解得很好,你想在战争之外外化Grails配置。 您可以在config.groovy中定义外部配置,如下所示

grails.config.locations = ["file:path/to/your/Configfile.groovy"]

请参阅Grails doc 4.4 Externalized Configuration

答案 1 :(得分:3)

使用以下命令定义外部Grails配置:

grails.config.locations = ["file:some/path/to/Config.groovy"]

然后在运行时重新加载它们,你可以使用这样的代码:

def config = grailsApplication.config
def locations = config.grails.config.locations

locations.each {
  String configFileName = it.split('file:')[0]
  config.merge(new ConfigSlurper().parse(new File(configFileName).text))
}

我在管理员保护的控制器中有上述代码。

答案 2 :(得分:1)

感谢Gregg

对于服务或groovy src文件,您可以使用:

import org.springframework.context.ApplicationContext
ApplicationContext ctx = (ApplicationContext) org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().getAttribute(org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes.APPLICATION_CONTEXT);
def grailsApplication = ctx.getBean("grailsApplication")
ConfigObject config = ctx.getBean(GrailsApplication).config
def locations = config.grails.config.locations
locations.each {
   String configFileName = it.split("file:")[1]
   config.merge(new ConfigSlurper().parse(new File(configFileName).text))
}

对于通常从控制器扩展的抽象类:

import grails.util.Holders
def config = Holders.config
def locations = config.grails.config.locations
locations.each {
  String configFileName = it.split("file:")[1]
  config.merge(new ConfigSlurper().parse(new File(configFileName).text))
 }