如何在不重建 Grails 中的 war 文件的情况下更新外部配置文件(例如: config-ex.groovy
、 )?config-ex.properties
重新启动应用程序服务器将应用来自外部配置文件的新更新。
如何在不重建 Grails 中的 war 文件的情况下更新外部配置文件(例如: config-ex.groovy
、 )?config-ex.properties
重新启动应用程序服务器将应用来自外部配置文件的新更新。
如果我理解得很好,您想在战争之外将 Grails 配置外部化。您可以像这样在 config.groovy 中定义外部配置
grails.config.locations = ["file:path/to/your/Configfile.groovy"]
请参阅 Grails 文档4.4 外部化配置
定义你的外部 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))
}
我在受管理员保护的控制器中有上述代码。
为了这个,绕着房子转了一圈,谢谢格雷格
对于服务或 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))
}