0

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

我的属性文件位于一个包中,例如 demo.prop,名称为 Prop1.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保存文件。

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

4

1 回答 1

0

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

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

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

    PropertiesConfiguration pc1=新的 PropertiesConfiguration(a); try(FileReader propReader = new FileReader(System.getenv().get("CONFIG_FILES") +"/overrides.prop"){ pc1.load(propReader); }

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

于 2013-05-21T23:02:37.590 回答