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

问题描述 投票:5回答:3

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

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

grails configuration-files application-settings
3个回答
5
投票

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

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

请参阅Grails doc 4.4 Externalized Configuration


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

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


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))
 }
© www.soinside.com 2019 - 2024. All rights reserved.