代码之家  ›  专栏  ›  技术社区  ›  prettyvoid

jar外部的ResourceBundle文件

  •  2
  • prettyvoid  · 技术社区  · 7 年前

    我有一个spring boot应用程序 /resources/application.properties ,部署时 application.properties 在罐子旁边(和里面的那个)。

    在我使用的代码中的某个地方 ResourceBundle.getBundle("application").getString("x") 但它总是返回jar中属性中定义的值。

    我的目标是从外部文件(如果存在)中获取值,如果不存在,则需要从jar内部获取值。就像默认的弹簧行为一样,但我无法实现这一点。

    编辑:

    您可以使用下面正确答案中的解决方案,也可以使用弹簧 Environment 通过自动布线和使用 getProperty()

    1 回复  |  直到 7 年前
        1
  •  4
  •   davidxxx    7 年前

    ResourceBundle.getBundle(String baseName) 依赖类加载器而不是直接由文件系统来查找资源。
    这相当于调用重载的:

    getBundle(baseName, Locale.getDefault(), this.getClass().getClassLoader()), 
    

    所以你的结果是意料之中的。
    你要找的是 PropertyResourceBundle
    要创建的实例,您需要 Reader InputStream

    您可以加载外部和内部文件。

    ResourceBundle internalProps = ResourceBundle.getBundle("application");
    ResourceBundle externalProps = new  PropertyResourceBundle(Files.newInputStream(Paths.get("application.properties"));
    

    您可以使用外部 ResourceBundle 在第一个意图中,第二个意图作为回退。