Автоматически перезагрузить файл свойств после изменения

Я разрабатываю приложение, которое получает информацию из свойств файла, и я создаю поле, которое помещает новые значения в файл свойств. Проблема в том, что когда я отправляю изменения, файл не перезагружается и изменения не учитываются только после перезагрузки приложения. Я работаю с 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 Manager вместо Tomcat, интегрированного в Liferay, но когда я хотел настроить Liferay с новым путем для ошибок Tomcat, появляется

Что я могу сделать, чтобы автоматически перезагрузить файл свойств после его изменения

3 ответа

Решение

Я нашел решение в другой теме, речь идет только о закрытии FileInputStream, и он отлично работает:)

Как перезагрузить файл свойств в java (ответ Джабала)

Вы изменяете свойства в srcПапка, это неправильно, вы должны изменить его в classes-folder.

PS: и это работает с Eclipse, потому что Eclipse скопировал это в папку классов.

Это похоже на проблему развертывания, а не на то, что tomcat неправильно читает свойства.

При развертывании в Tomcat через Eclipse он копирует файлы из вашего проекта в каталог развертывания [рабочее пространство eclipse]/. Metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/[сервер]. Он также может скопировать его в выходной каталог, в зависимости от того, что вы настроили.

Так что, если вы правильно поняли, вы сохраняете в свой файл рабочей области /src/main/resources/fooMessages_fr_FR.properties? Eclipse не понимает, что этот файл был обновлен, пока вы не нажмете на него, после чего он скопирует его в.plugins / blah, и все будет работать правильно.

Это, вероятно, будет работать правильно, если вы развернете вне Eclipse, потому что не будет никакого копирования из вашей рабочей области в каталог развертывания.

Если вы все еще застряли после этого, взгляните на apache commons FileChangedReloadingStrategy, который позволяет перезагрузить файл свойств при его изменении.

Другие вопросы по тегам