0

我正在开发一个从文件属性获取信息的应用程序,并创建一个将新值放入属性文件的字段问题是,当我提交更改时,不会重新加载文件,并且仅在重新加载应用程序后才考虑更改。我正在使用 Eclipse Indigo、Liferay 6.1、Tomcat 7.0、Vaadin、Spring、Hibernate 和 Maven

我正在使用此类将 textField 中的新值保存到文件中

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 上时很好,我不能在网络浏览器上这样做。

PS:听说如果我使用Tomcat Manager而不是集成在Liferay上的Tomcat,它可以工作,但是当我想用Tomcat的新路径配置Liferay时出现错误

修改后如何自动重新加载属性文件

4

2 回答 2

0

您更改src-folder 中的属性,这是错误的,您必须在classes-folder 中更改它。

ps:这适用于eclipse,因为eclipse将它复制到了classes文件夹。

于 2012-04-26T13:06:17.947 回答
0

这听起来像是一个部署问题,而不是 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 FileChangedReloadingStrategy,它允许您在属性文件更改时重新加载它。

于 2012-04-26T13:07:33.733 回答