我有一个/resources/application.properties
的春季启动应用程序,部署时,jar旁边有一个application.properties
(以及其中的一个)。
代码中的某处我使用ResourceBundle.getBundle("application").getString("x")
但总是返回jar内属性中定义的值。
我的目标是从外部文件中获取值,如果不存在,那么我需要从jar中获取值。就像默认的弹簧行为一样,但我无法实现这一点。
编辑:
您可以在下面的正确答案中使用解决方案,也可以依靠弹簧Environment
自动装配并使用getProperty()
答案 0 :(得分:1)
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
,在第二个意图中使用第二个意图。