Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是防止.properties文件进入WAR文件的最佳方法吗?_Java_Jakarta Ee_Properties File - Fatal编程技术网

Java 这是防止.properties文件进入WAR文件的最佳方法吗?

Java 这是防止.properties文件进入WAR文件的最佳方法吗?,java,jakarta-ee,properties-file,Java,Jakarta Ee,Properties File,为了将.properties文件外部化,目前我将其保存在一个文件系统中 C:\test\UI\properties 我创建了一个环境变量$PROP_LOCATION,它指向上面的文件位置。因此,每当我需要更改属性时,只需转到该位置编辑属性并刷新应用程序。它就像一个符咒 这是最好的方法吗?或者,你们专业人士建议我用其他方式将属性文件从war文件中删除吗 注意:以上内容在unix和windows环境中都可以正常工作,因为我有一个“if”条件,如果其中一个环境变量未找到,我将检查另一个环境变量。我建议

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

这是最好的方法吗?或者,你们专业人士建议我用其他方式将属性文件从war文件中删除吗


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

我建议使用spring的ReloadableResourceBundleMessageSource

请查看:

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


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

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

例如,如果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"));

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


我在对你做一件有点古怪的事。在我运行的应用程序中,有一页通知和其他消息,我希望用户看到,但为了便于我和其他人编辑这些消息,这些消息是从服务器上的其他位置加载的,甚至不在Tomcat文件夹中。然后,我就可以轻松编辑消息,而无需重新部署。

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