如何在不重建Grails中的war文件的情况下更新外部配置文件(例如:config-ex.groovy
,config-ex.properties
)?
重新启动应用程序服务器将从外部配置文件应用新更新。
答案 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))
}