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

时间:2013-05-21 09:46:44

标签: apache jsf properties configuration save

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

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

在我的WAR文件中,/ WEB-INF/classes/demo/prop/Prop1.prop

中存在相同的内容。

使用

FacesContext.getCurrentInstance()getExternalContext()的getResource( “/ WEB-INF /类/演示/丙/ Prop1.prop”);

我可以获取属性文件。所以当我尝试使用

从属性文件中提取字符串时
PropertiesConfiguration pc1=new PropertiesConfiguration(a);
                String s1=(String)pc1.getProperty("User_Name");

我能够得到正确的字符串。使用set属性方法我也可以设置属性。

pc1.setProperty("User_Name", "hardcodedString");

但我无法将FILE保存回此位置。无论我做什么,都无法使用 pc1.save 保存文件。

任何人都可以尝试告诉我如何将此文件保存回原始位置,以便在属性文件中完成的更改保持不变。

1 个答案:

答案 0 :(得分:0)

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

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

  1. 将属性放在数据库表中,以便轻松修改
  2. 使用外部属性文件覆盖“Prop1.prop”文件设置。你可以将其关闭,例如如下。假设您的WAR中捆绑了默认属性值,并且修改后的值保存到其他路径中,该路径是使用系统属性定义的 - 假设它叫做CONFIG_LOCATION。现在从捆绑包中加载属性后,您也可以从这个外部“overrides.prop”文件中读取它们 - 这将覆盖默认值为“Prop1.prop”:

    PropertiesConfiguration pc1 = new PropertiesConfiguration(a); try(FileReader propReader = new FileReader(System.getenv()。get(“CONFIG_FILES”)+“/ overrides.prop”){     pc1.load(propReader); }

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