5

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

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

4

3 回答 3

5

如果我理解得很好,您想在战争之外将 Grails 配置外部化。您可以像这样在 config.groovy 中定义外部配置

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

请参阅 Grails 文档4.4 外部化配置

于 2012-11-26T15:01:36.733 回答
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))
}

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

于 2012-11-26T19:45:17.710 回答
1

为了这个,绕着房子转了一圈,谢谢格雷格

对于服务或 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))
 }
于 2013-10-09T11:36:02.777 回答