更改后自动重新加载属性文件

时间:2012-04-26 12:11:59

标签: eclipse tomcat fileinputstream fileoutputstream file-properties

我正在开发一个从文件属性中获取信息的应用程序,我创建了一个将新值放入属性文件的字段 问题是,当我提交更改时,不会重新加载文件,只有在重新加载应用程序后才会考虑更改。 我正在使用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'已被更改。是否要用这些更改替换编辑器内容?”

当我点击“重新加载按钮”时,会提交更改并重新加载应用程序=>我在日食时很好,我不能在网络浏览器上这样做。

PS:我听说如果我使用Tomcat管理器代替Liferay上集成的Tomcat,它可以工作,但当我想为Liferay配置一个新的Tomcat错误路径时出现

修改后自动重新加载属性文件我该怎么办

3 个答案:

答案 0 :(得分:0)

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

ps:这与eclipse一起工作,因为eclipse将其复制到了类文件夹中。

答案 1 :(得分: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,它允许您在更改属性文件时重新加载。

答案 2 :(得分:0)

我在其他主题中找到了解决方案,它只关闭关闭FileInputStream并且它工作正常:)

How to reload properties file in java(Jabal的回答)