【问题标题】:How to access config file kept in WEB-INF folder如何访问保存在 WEB-INF 文件夹中的配置文件
【发布时间】:2013-10-04 09:18:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: tomcat groovy config


    【解决方案1】:

    您希望使用 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 语法......不是我的世界。 :)

    【讨论】:

    • Thnx,我想通了,是getClass().getResource("file")
    • 最好使用ServletContext,因为它肯定会为您提供正确的ClassLoadergetClass() 将为您提供 servlet 类的 ClassLoader应该是上下文的,但容器可以通过类加载来玩游戏,因此从 ServletContext 获取 ClassLoader 是最安全的赌注。
    • 我明白了。。谢谢你的解释。
    【解决方案2】:

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

    例如,在标准的 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);
          ...
       }
    }
    

    【讨论】:

    • 谢谢,没有任何选项可以让我只包含一次配置并在所有 groovy 文件中使用它吗?我的意思是不需要创建函数来读取文件并使用ConfigSlurper。我不能只使用grails provie configs 的方式吗?有点像this answer
    【解决方案3】:

    对我来说这每次都有效

    在您的 BoosStrap、控制器、TagLibs 和 服务:

    def grailsApplication
    

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

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

    适用于开发和生产

    【讨论】:

    • 为 Grails 3.0.9 工作。谢谢。
    【解决方案4】:

    我建议将配置文件从WEB-INF 移动到grails-app/conf 文件夹。此文件夹用于配置文件...

    Grails 允许您通过编辑Config.groovy 中的grails.config.locations 变量轻松导入自定义配置文件。见http://grails.org/doc/latest/guide/conf.html#configExternalized

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

    grails.config.locations = [ customConfig]
    

    【讨论】:

      【解决方案5】:
          def config = new ConfigSlurper().parse(servletContext.getResource("/WEB-INF/config.groovy"))
      

      这适用于所有环境。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 2015-10-17
        • 2014-08-17
        • 2016-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多