【问题标题】:ResourceBundle file outside jarjar 外的 ResourceBundle 文件
【发布时间】:2018-08-31 16:04:45
【问题描述】:

我有一个带有/resources/application.properties 的spring boot 应用程序,部署后,jar 旁边有一个application.properties(以及里面的那个)。

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

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

编辑:

您可以使用下面正确答案中的解决方案,也可以依靠弹簧Environment 自动装配并使用getProperty()

【问题讨论】:

    标签: java spring-boot configuration


    【解决方案1】:

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

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

    所以你的结果是预期的。
    你要找的是PropertyResourceBundle
    要创建您的实例,您需要 ReaderInputStream

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-24
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2011-01-25
      • 2017-09-25
      • 2017-03-22
      • 1970-01-01
      • 2012-02-05
      相关资源
      最近更新 更多