这是将 .properties 文件排除在 WAR 文件之外的最佳方法吗?

Posted

技术标签:

【中文标题】这是将 .properties 文件排除在 WAR 文件之外的最佳方法吗?【英文标题】:Is this the best way to keep .properties file out of WAR file? 【发布时间】:2012-11-09 18:24:00 【问题描述】:

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

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

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

【问题讨论】:

Where to place configuration properties files in a JSP/Servlet web application?的可能重复 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

比如example.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"));

【讨论】:

【参考方案3】:

我建议使用spring的ReloadableResourceBundleMessageSource

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

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

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

【讨论】:

您可以使用具有此类的spring库并在您的应用程序中使用它

以上是关于这是将 .properties 文件排除在 WAR 文件之外的最佳方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

玩! war 命令 - 是不是可以从应用程序 /lib 文件夹中排除某些 jar

在 .war 之外引用 configuration.properties

在 WAR 文件中排除 Ivy 依赖项

Maven -- 在进行war打包时排除不需要的文件

从war文件中排除所有不必要的jar

Maven -- 在进行war打包时排除不需要的文件