Java, Spring рекомендации по использованию переменных в файлах свойств

#java #spring #file #ant #properties

#java #spring #файл #ant #свойства

Вопрос:

Я использую org.springframework.beans.factory.config.PropertyPlaceholderConfigurer . Существует 3 файла свойств. Итак, если свойства дублируются — last выигрывает.

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

 log.dir=c:/log.
  

Поэтому я могу заменить часть пути в свойствах, таких как

 ${log.dir}/app1.log
  

В первом файле у меня 48 применений этой переменной.

Во втором файле у меня есть 25 замен для свойств из первого файла и 5 замен в третьем файле.

Проблема в том, что мне нужно переопределить эту переменную также во втором и третьем файле!

Я хотел бы использовать то же имя

 log.dir
  

Но если я определю это во втором или третьем файле — переопределение вернется к первому файлу — но мне нужно использовать остальные 18 (48 -25 — 5 = 18) старых свойств.
Каковы рекомендации в подобных случаях?
Спасибо.
После некоторого анализа я хотел бы иметь переменную с одинаковым именем во всех файлах свойств, но значения не должны переопределяться. Итак, для первого файла log.dir=c:log, для второго log.dir= d:log, для третьего log.dir= e:log . И при вычислении путей для каждого используемого файла. Таким образом, переопределенными должны быть только свойства, а не переменные.

Комментарии:

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

Ответ №1:

Что (я думаю) вы хотели бы сделать, так это заставить log.dir переменную изменять значение по мере того, как конфигуратор просматривает файлы свойств и сталкивается с вашими переопределяющими определениями.

Проблема в том, PropertyPlaceholderConfigurer что это не работает таким образом; для каждого встречающегося ${placeholder} определения он проверяет только выигрышное переопределение. Он разрешает заполнители с учетом контекста файла, в котором они определены.

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