0

要外部化 .properties 文件,目前我将其保存在文件系统中,例如 C:\test\UI\properties,并且我创建了一个指向上述文件位置的环境变量 $PROP_LOCATION。因此,每当我需要更改属性时,只需转到该位置编辑属性并刷新应用程序即可。它就像一个魅力。

那么这是最好的方法吗?或者您的专业人士是否有其他方法建议我将属性文件保留在战争文件之外?

注意:上面的东西在unix和windows环境中都可以正常工作,因为我有一个“if”条件,如果没有找到一个环境变量,我将检查另一个环境变量。

4

3 回答 3

1

我通常通过将目录添加到类路径来引用外部属性文件。

例如,如果exam​​ple.properties在路径C:\test\UI\properties目录下,我调用JVM如下:

java -classpath C:\test\UI\properties MyJavaProgram

在 Java 代码中,您可以通过以下机制加载属性:

Properties p = new Properties();
p.load(getClass().getClassLoader().getResourceAsStream("/example.properties"));
于 2012-11-21T13:41:04.363 回答
1

我同意将属性文件与您的应用程序一起打包是最有意义的。如果您有正当理由不这样做,那么您的解决方案似乎没问题,只要在部署中将文件放置在您的应用程序可以访问且不暴露于 Internet 的位置。

我正在做一些类似于你的事情。在我正在运行的应用程序中,有一个我希望用户看到的公告和其他消息页面,但是为了让我和其他人更容易编辑这些消息,它们是从服务器上的另一个位置加载的,甚至没有在 Tomcat 文件夹中。然后我可以轻松地编辑消息,甚至无需重新部署。

于 2012-11-21T13:43:48.883 回答
0

我建议使用spring的ReloadableResourceBundleMessageSource

看看:http ://static.springsource.org/spring/docs/1.2.9/api/org/springframework/context/support/ReloadableResourceBundleMessageSource.html

至于放置属性文件,我不认为将它们放在应用程序之外是个好主意。无论如何,您都应该将它们打包在 war 中,因为它们在逻辑上是您的应用程序的一部分。

而且由于您正在重新加载应用程序,因此每次属性更改时,您都可以使用 maven 任务在服务器上构建、部署和重新加载应用程序。

于 2012-11-21T13:30:36.437 回答