我们正在尝试使用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 保存文件。
任何人都可以尝试告诉我如何将此文件保存回原始位置,以便在属性文件中完成的更改保持不变。
答案 0 :(得分:0)
修改WAR文件是个坏主意(例如,某些Web服务器可能会注意到该文件 修改重新部署您的应用程序,当服务器爆炸部署战争等时可能会出现问题。)
我建议采用另一种方法 - 一些可能性是:
使用外部属性文件覆盖“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” - 这将保存所有更改 属性,不仅是已更改的属性,而且应该没有负面影响。