当前位置: 首页 > 知识库问答 >
问题:

如何将外部文件加载到classpath Play Framework 2.3中

党宇定
2023-03-14

我需要使用Play Framework 2.3(Java)将外部文件加载到类路径中

规定:

ClassLoader classLoader = com.my.package.MyCustomJavaClass.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("/path/to/myproperties.properties");

我的Play Framework应用程序(使用Java)在其/lib文件夹中有这个自定义JAR,因此它会自动添加到类路径中(经过测试,工作正常)。我的Play应用程序在第一次加载/路由(索引路由)时调用MyCustomJavaClass,所以当我在浏览器中点击我的Play应用程序时,上面的类加载器和输入流代码就会被启动。

问题:

>

  • 在启动Play应用程序时,我尝试将/path/to/myproperties.properties加载到类路径中,但没有成功,因为我在自定义JAR中的代码可以看到它。

    activator start -J-classpath "-J-classpath:/path/to/myproperties.properties"
    

    我将-j-classpath;添加到路径的开头,试图复制类路径中当前的所有内容,然后只添加一个外部文件。但是,这样做似乎不起作用(即我的inputStream为空)。

    问题:

    >

  • 启动播放应用程序时,我是否正确执行了activator start-j-classpath命令?试图先复制现有类路径的其他变体不允许启动play应用程序,但这个命令至少可以启动我的应用程序。

  • 共有1个答案

    姜钊
    2023-03-14

    这是我想出的解决方案,希望它能帮助到其他人:

    >

  • 在部署play应用程序的“上层环境”(AWS服务器)中,我将application-override.conf文件放在play framework应用程序目录的conf文件夹中

    code>application-override.conf与我的application.conf完全相同,但我在两者中都有一些自定义属性,它们的值在play应用程序生存的每个环境中都不同

    我的play framework应用程序在git repo中,它被克隆在每个上层环境中,所以我将application-override.conf添加到.gitignore(我不希望它被选中到repo中,所以它只存在于服务器上)

    启动播放应用程序时,我现在使用activator start“-dconfig.trace=loads-dconfig.file=conf/application-override.conf”。这将用application-override.conf覆盖application.conf文件,并且application-override.conf将位于play用于运行应用程序的JVM类路径中(因为它位于conf目录中)。-dconfig.trace=loads会吐出更多日志记录,让您知道.conf文件是否正确加载;如果一切正常工作,这不是一个必要的标志。

    在java方面,在我的自定义JAR中,我现在可以执行以下操作:

    Properties properties;
    InputStream stream;
    ClassLoader classLoader = com.my.package.MyCustomJavaClass.class.getClassLoader();
    
    // first, look for application-override.conf in the classpath (upper environments)
    stream = classLoader.getResourceAsStream("application-override.conf");
    
    // if null, check for application.conf (local environment)
    if (stream == null) {
        stream = classLoader.getResourceAsStream("application.conf");
    }
    
    properties = new Properties();
    properties.load(stream);
    stream.close();
    

    其他说明:

    >

  • 我曾考虑在conf目录中做一个符号链接/软链接,并将application-override.conf文件放在我环境中的其他地方,但在Play2.4之前,您不能在conf目录中有符号链接,所以我只是将实际的application-override.conf文件放在conf文件夹中

    application-override.conf文件对于每个“上层环境”都有不同的属性值,否则我将只向git repo交付一个覆盖文件。在自定义JAR中,我不想放入寻找不同文件名的逻辑,如dev-override.confpre-prod-override.confprod-override.conf等,我想要一个单一的上层环境覆盖文件。

    Activator Start结合的-classpath=/path/to/myproperties.properties-j-classpath=/path/to/myproperties.properties命令未成功。我也没有成功尝试追加到类路径,例如activator start-j-classpath=-j-classpath:/path/to/myproperties.properties或其他类似的组合

    application-override.conf文件中放置属性对我来说实际上是一举两得,因为我一直希望通过在每个环境中重写.conf文件以及自定义属性来进行一些特定于环境的更改

    conf文件的HOCON格式要求我在属性值周围加上双引号,这是由于属性值的性质。在Java中读取这些属性时,引号对我来说仍然存在,所以在读取这些属性时,我必须执行str.replace(“\”“,”“)

  •  类似资料:
    • 本文向大家介绍JS加载器如何动态加载外部js文件,包括了JS加载器如何动态加载外部js文件的使用技巧和注意事项,需要的朋友参考一下 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js JsLoader.js测试 测试结果如下:

    • 问题内容: 在使用库在JavaScript中绘制图表时,我还是一个新手。我刚刚开始尝试使用Chartjs,但一直无法使用getJson或其他任何方式加载我的json对象并替换标签和数据。我以前使用过HighCharts,相比之下,它非常简单。另外,我将如何将其放入Angular的指令中并显示出来。 https://jsfiddle.net/0u9Lpttx​​/1/ index.html data

    • 我试图使用axios将一个外部url加载到使用vuejs的div中,我得到了 CORS策略阻止了从origin访问在处的XMLHttpRequest:请求的资源上没有'Access-Control-Allow-Origin'标头。 我错过了什么? 堆栈跟踪: CORS策略阻止从来源“http://localhost:8080”访问位于“https://pay.stripe.com/receipts

    • 这个标题非常接近如何在IntelliJ IDEA中添加外部库?以及将外部jar(lib/*.jar)添加到IntelliJ IDEA项目的正确方法。然而,我已经检查过了。 在“如何在IntelliJ IDEA中添加外部库?”,我不能很好地理解最佳答案的含义,也不能很好地理解在评论空间中提出相同问题的人。所以,有人给了他一个回答,显示了“向IntelliJ IDEA项目添加外部jar(lib/*.j

    • 问题内容: 到处寻找它,找到答案却迷失了。有谁知道如何从另一个js文件加载外部.js文件? innerHTML可以工作,并且可以粘贴响应文本。问题在于JS无法在该文档中工作。jQuery.getScript应该正在加载该外部js文件,但不会加载 问题答案: 这是您将外部js文件加载到Jquery的方法

    • 实际开发中,大多数项目,通常是3D美术设计师或建筑、机械等行业工程师提供的由3dmx、blender、substence、Solidworks等软件创建好的三维模型文件。 本章节第一小节以Threejs引擎自身为例,讲解Threejs模型导入导出,该小节对Threejs模型文件本身进行了讲解,让你明白你加载的三维模型文件里面都是包含什么内容。其它章节展示了一些加载外部不同格式模型的案例,除了讲解实