3

我是 groovy 的新手。并寻找一种将常用配置存储在一个地方的方法,以便我的应用程序可以访问它。

我正在为我的 groovy 应用程序保留配置WEB-INF,如何从我的主应用程序访问该文件?

我试过这个ConfigSlurper().parse(new File("config.groovy").toURL()),但不能让它工作,因为tomcat期望的路径config.groovy是tomcat的安装位置。我将我的 appBase 配置到其他位置。

如何提供相对路径new File('')以便它可以读取配置文件?

4

5 回答 5

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 语法……不是我的世界。:)

于 2013-10-04T19:12:58.320 回答
1

如果您的配置必须在部署时设置,您可以将文件放入您的战争并使用类加载器访问它们。

例如,在标准的 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);
      ...
   }
}
于 2013-10-04T10:54:52.923 回答
1

对我来说,这每次都有效

在您的 BoosStrap、控制器、TagLibs 和服务中注入“grailsApplication”:

def grailsApplication

将您的文件放在 /web-app/WEB-INF/resources 并使用这行代码来检索您的资源目录:

def resources = grailsApplication.mainContext.getResource('/WEB-INF/resources').file

适用于开发和生产

于 2014-06-06T14:19:59.550 回答
0
    def config = new ConfigSlurper().parse(servletContext.getResource("/WEB-INF/config.groovy"))

这适用于所有环境。

于 2014-11-22T17:58:55.220 回答
0

我建议将配置文件从WEB-INFgrails-app/conf文件夹中移出。此文件夹用于配置文件...

Grails 允许您通过grails.config.locationsConfig.groovy. 请参阅http://grails.org/doc/latest/guide/conf.html#configExternalized

如果您的配置文件的名称是customConfig.groovy并且您将其移动到 grails-app/conf您可以使用:

grails.config.locations = [ customConfig]
于 2013-10-04T14:18:53.913 回答