我已经创建了小grails应用程序现在我需要处理配置文件中的动态参数,我已经为数据源做了,我在最后放在datasource.groovy文件中的代码下面
grails.config.locations = ["classpath:config.properties"]
并在grails-app / config中创建了一个config.properties文件,其工作正常,但问题是我生成war文件,属性文件位置在WEB-INF / classes中,但我需要WEB-INF之外的那个文件,eaxmple结构如:
myApp:
我该如何解决这个问题?
答案 0 :(得分:1)
我最喜欢的选项:在您的应用服务器中指定一个额外的类路径,并将您的属性文件放在此路径中。
E.g。在Tomcat中,它将是位于 $ CATALINA_HOME / conf / catalina.properties (或 $ CATALINA_BASE / conf / catalina.properties ,如果存在)的'common.loader'属性。 (如果你使用像 tomcat7-maven-plugin 这样的< 配置>标签有'< additionalClasspathDirs >'元素你在哪里可以指定其他类路径。)
有关此主题的更多讨论,请参阅this blog。
答案 1 :(得分:1)
对于Grails< 3.0 - 在配置文件中,您可以放入或取消注释以下代码。把它放在config.groovy文件的末尾,这样它将覆盖预定义的配置属性:
// keep it at the end of the file - so you can override with external config
grails.config.locations = [ "classpath:${appName}-config.properties",
"classpath:${appName}-config.groovy",
"file:${userHome}/.grails/${appName}-config.properties",
"file:${userHome}/.grails/${appName}-config.groovy"]
if (System.properties["${appName}.config.location"]) {
grails.config.locations << "file:" + System.properties["${appName}.config.location"]
}
然后创建 myapp-config.properties ,甚至更好, myapp-config.groovy 格式文件home .grails文件夹(&#34; myapp&#34;是你的应用程序名称) 因此,您可以为开发环境中的每个Grails应用程序提供外部配置文件。 对于生产,它需要在Tomcat类路径中 - 所以一个好的地方是将它放在tomcat lib文件夹中。
答案 2 :(得分:0)
假设您的应用程序名为myapp,并将名为myapp-config.groovy的配置文件放在用户主目录下名为myapp的文件夹中:
def loadExternalConfiguration() {
def contextPath = grailsApplication.mainContext.servletContext.contextPath.substring(1)
def userHome = System.properties['user.home']
def userConfigDir = new File("${userHome}/${contextPath}")
if (userConfigDir.exists()) {
File configFile = new File("${userConfigDir}/${contextPath}-config.groovy")
if (configFile.exists() && configFile.isFile()) {
def configSlurper = new ConfigSlurper()
def configPart = configSlurper.parse(configFile.toURI().toURL())
grailsApplication.config.merge(configPart)
}
}
}