我是groovy的新手。并寻找一种方法在一个地方存储常见的配置,以便我的应用程序可以访问它。
我在WEB-INF
中保留了常规应用程序的配置,如何从主应用程序访问该文件?
我尝试了这个ConfigSlurper().parse(new File("config.groovy").toURL())
,但无法使其正常工作,因为tomcat期望config.groovy
的路径是安装tomcat的地方。我将appBase配置到其他位置。
如何提供new File('')
的相对路径以便它可以读取配置文件?
答案 0 :(得分:2)
您希望使用ClassLoader而不是文件系统直接执行此操作。基本上,不要使用File
。我不确定如何在Groovy中执行此操作,但在普通的Java中它看起来像这样:
URL config = request.getServletContext().getResource("/WEB-INF/config.groovy");
...然后用URL做任何你想做的事。 (仅供参考getResource
方法使用webapp的ClassLoader)。所以,也许在Groovy中可能是:
ConfigSlurper().parse(request.ServletContext.getResource("/WEB-INF/config.groovy"))
抱歉,我不能给你准确的Groovy语法......不是我的世界。 :)
答案 1 :(得分:1)
如果您的配置必须在部署时设置,您可以将文件放入战争中并使用classloader访问它们。
例如,在标准的maven项目中,将配置文件放在src / main / resources / config /目录(file1.config,file2.config等)中。 然后在你的java代码中添加以下内容
public class MyConfigLoader {
void loadConfigFile(String configFileName) {
InputStream is = MyConfigLoader.class.getClassLoader().getResourceAsStream("config/"+configFileName);
...
}
}
答案 2 :(得分:1)
对我而言,每次都有效
在BoosStrap,Controllers,TagLibs和。中注入'grailsApplication' 服务:
def grailsApplication
将您的文件放在/ web-app / WEB-INF / resources中并使用此行 用于检索资源目录的代码:
def resources = grailsApplication.mainContext.getResource('/WEB-INF/resources').file
在开发和生产中都有效
答案 3 :(得分:0)
我建议将配置文件从WEB-INF
移动到grails-app/conf
文件夹。此文件夹用于配置文件......
Grails允许您通过编辑grails.config.locations
中的Config.groovy
变量轻松导入自定义配置文件。见http://grails.org/doc/latest/guide/conf.html#configExternalized
如果配置文件的名称为customConfig.groovy
,并且您将其移至grails-app/conf
,则可以使用:
grails.config.locations = [ customConfig]
答案 4 :(得分:0)
def config = new ConfigSlurper().parse(servletContext.getResource("/WEB-INF/config.groovy"))
适用于所有环境。