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 был изменен в файловой системе. Вы хотите заменить содержимое редактора с этими изменениями? "

Когда я нажимаю «кнопка перезагрузки», отправляются изменения и приложение перезагружается => это нормально, когда я нахожусь на затмении, я не могу сделать это в веб-браузере.

PS: Я слышал, что он может работать, если я использую Tomcat диспетчер вместо Tomcat интегрированы в Liferay, но когда я хотел настроить Liferay с новым путем ошибок Tomcat появляется

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

ответ

0

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

How to reload properties file in java (ответ Джебель в)

+0

Опасайтесь, что вам также необходимо закрыть FileOutputStream: Из метода хранилища javadocs: «Выходной поток остается после открытия этого метода ". –

0

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

ps: и эта работа с eclipse, потому что eclipse скопировал это в папку классов.

+0

я заменил «C: /integrationContinue/src/main/resources/fooMessages_fr_FR.properties "with"/integrationContinue/target/classes/fooMessages_fr_FR.свойства "Он сохраняет данные в файле, но он не может быть открыт с помощью eclipse и не может быть перезагружен, потому что функции получают свойства из папки ресурсов и/target/classes появляется только после« чистой установки » – Jhon

+0

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

+0

Но я думаю, что это будет работа с этим решением и папкой 'src', только запускаясь в eclipse. Потому что в среде «производства» у вас не будет папки «src». – Mark

0

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

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

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

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

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