Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Apache 将修改后的属性文件保存在服务器上部署的WAR中_Apache_Jsf_Properties_Configuration_Save - Fatal编程技术网

Apache 将修改后的属性文件保存在服务器上部署的WAR中

Apache 将修改后的属性文件保存在服务器上部署的WAR中,apache,jsf,properties,configuration,save,Apache,Jsf,Properties,Configuration,Save,我们正试图在使用JSF和JBoss的项目中使用Apache PropertiesConfiguration 我的属性文件位于名为Prop1.prop的demo.prop包中 在我的WAR文件中,/WEB-INF/classes/demo/prop/Prop1.prop下也有相同的文件 使用 FacesContext.getCurrentInstance().getExternalContext().getResource(“/WEB-INF/classes/demo/prop/Prop1.pro

我们正试图在使用JSF和JBoss的项目中使用Apache PropertiesConfiguration

我的属性文件位于名为Prop1.prop的demo.prop包中

在我的WAR文件中,/WEB-INF/classes/demo/prop/Prop1.prop下也有相同的文件

使用

FacesContext.getCurrentInstance().getExternalContext().getResource(“/WEB-INF/classes/demo/prop/Prop1.prop”)

我能够获取属性文件。因此,当我尝试使用

PropertiesConfiguration pc1=new PropertiesConfiguration(a);
                String s1=(String)pc1.getProperty("User_Name");
我能得到正确的字符串。使用set property方法,我也可以设置属性

pc1.setProperty("User_Name", "hardcodedString");
但我无法将文件保存回此位置。无论我做什么,都无法使用pc1.save保存文件


请告诉我如何将此文件保存回其原始位置,以便在属性文件中所做的更改保持原样。

修改WAR文件是一个坏主意(例如,某些web服务器可能会注意到该文件) 修改或重新部署应用程序,服务器爆发部署战时可能会出现问题等。)

我建议采用另一种方法——一些可能性是:

  • 将属性放在数据库表中,以便轻松修改
  • 使用外部属性文件覆盖“Prop1.prop”文件设置。例如,您可以按如下方式完成此操作。假设默认属性值捆绑在WAR中,修改后的值保存到其他路径,该路径是使用系统属性定义的,比如说它被称为CONFIG_LOCATION。现在,从bundle加载属性后,您也可以从这个外部“overrides.prop”文件中读取它们-这将覆盖“Prop1.prop”中的默认值:

    PropertiesConfiguration pc1=新的PropertiesConfiguration(a); try(FileReader-propReader=newfilereader(System.getenv().get(“CONFIG_FILES”)+“/overrides.prop”){ pc1.加载(propReader); }

    当您需要保存更改时,您可以对“overrides.prop”执行该操作—这将保存所有更改 属性,不仅是更改的属性,而且应该没有负面影响


  • 因此,您试图保存放置在WAR存档中的“Prop1.prop”?除了有问题(因为WAR被压缩)之外,我认为这不是一个好主意。可能将修改后的属性保存到放置在可访问位置的另一个prop文件中,并加载两个文件(修改后的一秒钟)-因此,修改后的道具文件中的更改将覆盖原始文件。同意。我知道在战争中进行修改不是一个好做法。但我需要在不考虑的情况下进行修改。您还可以详细说明您提供的替代方案吗?在应用程序启动时,我正在使用Bundle读取道具文件。您建议我如何重新加载它..请注意:我仍然需要先从捆绑包加载,然后再从捆绑包加载。如果数据库不可用怎么办?仅出于这个原因,我更喜欢纯文本文件。易于连接、易于安装、易于加密、易于编辑、易于重新创建、易于迁移。这里有一些严重的帖子。总体而言,有些不错的建议,但Db有一些风险。没错,但我的建议基本上就是这样的#2。就像我说的,好的建议只是小心使用数据库“简单”用于少量配置的持久性存储。这取决于具体情况。我见过有人安装整个服务器,以便将配置数据存储在其中。现在,如果HA解决方案中需要很多配置,那么文本文件将有点原始。