Файл свойств, не отражающий измененные изменения с использованием конфигурации Apache Commons

Я пытаюсь изучить конфигурацию общих ресурсов Apache, чтобы динамически загружать файл свойств, вносить изменения в файл и сохранять его.

Я написал демонстрационный код для того же самого.

Фрагмент кода

    package ABC;


    import org.apache.commons.configuration.ConfigurationException;
    import org.apache.commons.configuration.PropertiesConfiguration;
    import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;




    public class Prop {

        public static void main(String[] args)
        {

            try {
URL propertiesURL = Prop.class.getResource("/d1.properties");

            if (propertiesURL == null) {
              System.out.println("null");
            }
String absolutePath=propertiesURL.getPath();
                PropertiesConfiguration pc = new PropertiesConfiguration(absolutePath);
                pc.setReloadingStrategy(new FileChangedReloadingStrategy());
                String s=(String)pc.getProperty("key_account_sales");
                System.out.println("s is " +  s);
                pc.setAutoSave(true);
                pc.setProperty("key_account_sales", "Dummy");
                pc.save();
                System.out.println("Modified as well");
                String sa=(String)pc.getProperty("key_account_sales");

                System.out.println("s is " +  sa);
            }catch(ConfigurationException ce)
            {
                ce.printStackTrace();
            }
        }

    }

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

Я попытался обновить всю рабочую область и проект, но файл свойств по-прежнему показывает предыдущую запись, тогда как этот код отображает обновленную запись в консоли.

Почему мой файл свойств не обновляется?

Ну, я заметил, что новый файл с таким же именем был сформирован в каталоге bin моей рабочей области IDE. Этот новый файл содержит необходимые изменения.

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

Мой файл свойств находится внутри пакета веб-приложения, скажем

Дем1

по имени

Prop1.prop

Я хочу прочитать этот файл свойств из другого класса, скажем

Чтение.java

находится внутри другого пакета

Дем2

, внесите изменения в этот же файл свойств и покажите его другому пользователю. Это веб-приложение, развернутое на сервере приложений.

Даже после использования абсолютного пути в простом файле (основная функция) он не отражает изменения в том же файле, а обновляет его в новом файле.

Я делаю очень небольшую ошибку, но может кто-нибудь, пожалуйста, помогите.

Используя абсолютный путь, я не могу вносить изменения в тот же файл свойств и в обычном основном методе. Пожалуйста, предложите.

Новый файл в каталоге bin создается вместо обновления того же файла в папке src.


person AngelsandDemons    schedule 09.05.2013    source источник
comment
+1 за пример копирования/вставки   -  person Duncan Jones    schedule 09.05.2013


Ответы (1)


Вы должны быть в состоянии решить это, используя абсолютные пути. Класс PropertiesConfiguration находит ваш файл свойств где-то в пути к классам и знает только, что нужно записать обратно в "d1.properties"; следовательно, у вас есть файл, появляющийся в вашем каталоге bin.

Абсолютный путь можно получить, запросив ресурсы в пути к классам. Что-то вроде следующего:

URL propertiesURL = Prop.class.getResource("/d1.properties");
if (propertiesURL == null) {
  // uh-oh...
}

String absolutePath = propertiesURL.getPath();
// Now use absolutePath
person Duncan Jones    schedule 09.05.2013
comment
Согласен. Но в конечном итоге он должен войти в веб-приложение, где, я думаю, мне придется использовать относительный путь. В этом случае он снова создаст новый файл или обновит существующий файл. Это очень важно. Предположим, что веб-приложение работает в интрасети, и пользователь хочет изменить ключ/значение, и я хочу показать другому пользователю измененный ключ/значение. Поэтому изменения должны происходить только в 1 файле свойств. - person AngelsandDemons; 09.05.2013
comment
@AngelsandDemons Не проблема, смотрите мои правки выше. Получение абсолютного пути для ресурса пути к классам не является проблемой. - person Duncan Jones; 09.05.2013
comment
Ценю вашу помощь. К сожалению, в моем веб-приложении файл свойств находится внутри пакета, скажем, в package1.org1 под именем Property1.prop. Как вы предлагаете мне загрузить этот файл, прочитать свойство и обновить свойство в том же файле свойств, а не создавать новый файл свойств. Я думаю, что это определенно послужит моей цели. - person AngelsandDemons; 10.05.2013
comment
@AngelsandDemons Пожалуйста, отредактируйте свой вопрос, чтобы было ясно, где именно находится ваш файл свойств. - person Duncan Jones; 10.05.2013