我正在开发一个从文件属性中获取信息的应用程序,我创建了一个将新值放入属性文件的字段问题是当我提交更改时,文件不会重新加载,并且仅在重新加载应用程序后才考虑更改。我正在使用Eclipse Indigo,Liferay 6.1,Tomcat 7.0,Vaadin,Spring,Hibernate和Maven
我正在使用此类将文本字段中的新值保存到文件中
public class configurationProperties {
Properties prop = new Properties() ;
File fProp = new File("C:/integrationContinue/src/main/resources/fooMessages_fr_FR.properties") ;
FileInputStream stream = null;
FileOutputStream oStream = null;
public void changeUrlJenkins(String url) throws IOException{
stream = new FileInputStream(fProp);
prop.load(stream) ;
prop.setProperty("jenkins.url",url) ;
oStream = new FileOutputStream(fProp);
prop.store(oStream,"test") ;
}
当我单击保存按钮时,没有任何反应,但是如果我打开属性文件
我收到此消息"文件'.../fooMessages_fr_FR.properties'已在文件系统上更改。是否要用这些更改替换编辑器内容?
当我单击"重新加载按钮"时,将提交更改并重新加载应用程序=>当我在 eclipse 上时很好,我无法在 Web 浏览器上执行此操作。
PS:我听说如果我使用Tomcat管理器而不是Liferay上集成的Tomcat就可以工作,但是当我想为Liferay配置Tomcat错误的新路径时
修改后如何自动重新加载属性文件
您更改src
文件夹中的属性,这是错误的,您必须在classes
文件夹中更改它。
PS:这适用于 Eclipse,因为 Eclipse 将其复制到 classes 文件夹中。
这听起来像是一个部署问题,而不是 tomcat 没有正确读取属性。
当您通过 Eclipse 部署到 Tomcat 时,它会将项目中的文件复制到部署目录 [eclipse workspace]/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/[server]。它还可能将其复制到输出目录,具体取决于您配置的内容。
因此,如果理解正确,您将保存到工作区文件/src/main/resources/fooMessages_fr_FR.properties?Eclipse 直到您单击它时才意识到此文件已更新,此时它会将其复制到 .plugins/blah,并且一切正常。
如果在 Eclipse 外部部署,这可能会正常工作,因为不会有任何从工作区复制到部署目录的操作。
如果您在此之后仍然卡住,请查看apache commons FileChangedReloadStrategy,它允许您在属性文件更改时重新加载属性文件。