Jar包外的资源绑定文件

3
我有一个Spring Boot应用程序,其中包含一个名为/resources/application.properties的文件。当部署时,会在jar旁边(以及其中一个)生成一个application.properties文件。
在代码的某个地方,我使用了ResourceBundle.getBundle("application").getString("x"),但它总是返回内部jar中定义的值。
我的目标是,如果存在外部文件,则从外部文件获取值,否则需要从内部jar获取值。就像默认的Spring行为一样,但我无法实现这一点。
编辑:
您可以使用下面正确答案中的解决方案,或者可以依赖于Spring的Environment,通过自动装配并使用getProperty()来实现。
1个回答

5

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,并将第二个用作回退。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接