2014-10-09 3 views
0

У меня есть стандартное приложение Java, которое считывает свойства конфигурации во время запуска, которые работают нормально. Однако я хотел бы обновить свойства конфигурации во время выполнения без компиляции кода каждый раз. Как бы я это сделал.Как настроить свойства конфигурации Java во время выполнения?

код например:

Properties py = new Properties(); 
    InputStream ins; 
    String prepName = "config.properties"; 

    ins = getClass().getClassLoader().getResourceAsStream(prepName); 

    if (ins == null) { 
     System.err.println("Couldn't find the file!"); 
     return "Error"; 
    } 
    py.load(ins); 

    String message = py.getProperty("msg"); 

ресурсы/config.properties

msg=testMessage 

Если я хочу изменить сообщение динамически, как бы я это сделать?

+0

Вы можете использовать System.setProerty (String key, String value) и System.getProerty (String key), чтобы установить все свойства, необходимые для выполнения System.setProerties (py). – StackFlowed

+0

Не уверен, что я понял ваш вопрос, но если вы хотите, чтобы ваше приложение просматривало файл свойств, а если вы используете java 7, вы можете попробовать что-то вроде этого: http://howtodoinjava.com/2012/10/10/auto-reload-of-configuration-when-any-change-happen/ – Leo

+0

@ Leo, спасибо за вашу рекомендацию, которая мне нужна именно для Java 6. Однако Дэвид предложил решение для этого. – RajK

ответ

0

WatchService ссылка на комментарий Лео выглядит интересной. Я сделал эту предварительную Java 7, используя объект Properties и рабочий поток, который проверяет временную метку изменения файла каждые 15 секунд (или так). Если временная метка файла изменяется, перезагрузите объект Properties из файловой системы.

Что-то вроде:

Properties py = new Properties(); 
long lastModMillis = 0L; 
long modMillis = file.lastModified() // to get the file modification time 

if (modMillis != lastModMillis) 
{ 
    // reload data 
    FileInputStream fis = ... 
    py.clear(); 
    py.load(fis); 
    lastModMillis = modMillis; 
} 

(не включает уборщица код треда)

Обязательно подумайте, как вы будете синхронизировать все так нити пытается прочитать данные не будут сталкиваться, когда работник thread - перезагрузка объекта при изменении файла.

+0

Я благодарю вас за предложение, которое мне нужно! – RajK

2

Вы можете использовать setProperty(String key, String value) для изменения значений во время выполнения.

py.setProperty("msg", "newValue"); 
+0

evanwong, спасибо за ваш быстрый ответ. Однако то, что я хочу сделать, это обновить файл config.properties и попросить приложение получить новые данные. возможно ли это с помощью метода .properties? – RajK

+0

@RajK +1 После обновления файла ваша программа должна его прочитать (возможно, снова) –

+0

@RajK, один из способов сделать это, чтобы поместить 'py' в какое-то общее состояние и иметь [Timer] (http: //docs.oracle.com/javase/7/docs/api/java/util/Timer.html) (возможно, в отдельном потоке), чтобы обновить 'py' как в каждую минуту (вы определяете таймер). – evanwong

Смежные вопросы