2011-02-01 2 views
0

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

Мой первоначальный наклон, чтобы создать отдельный файл, selector.properties, которого одно свойство используется для определения правильного файла:

properties.file=deploymentConfiguration1.properties

... для одного развертывания, или:

properties.file=deploymentConfiguration2.properties

... для следующего развертывания.

Другой разработчик в моей команде есть ApplicationProperties класс, в котором:

private static final String PROP_FILE="someFileName.properties";

... является средством, чтобы сделать это. Тем не менее, я хочу переключить файлы свойств без перестройки! Спасибо заранее за ваш вклад.

EDIT: Возможно, сначала я должен был быть более понятным, но это для набора веб-сервисов, упакованных как AAR. Я просто брошу его на веб-сервер и позволяю Tomcat и Axis2 делать свою работу.

Итак, я не думаю, что некоторые ответы с параметрами командной строки будут работать в этом контексте.

+0

Вы используете какой-либо фреймворк или инструментарий в своем проекте, который может помочь в этом (например, весна)? –

+0

Мы используем JSF и Weld в части веб-приложения нашего проекта. –

+0

Мне кажется, что вы нашли решение своей проблемы. В чем проблема с этим решением? –

ответ

5

Имеются несколько файлов свойств, по одному на env, например;

application-dev.properties 
application-test.properties 
application-prod.properties 

Запустите приложение с env как системное свойство;

java -Denv=test 

Загрузить свои свойства из соответствующего файла;

String props = "application-" + System.getProperty("env") + ".properties"; 

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

Edit:
Если это веб-приложение, вы можете установить значение окр в дескрипторе развертывания (web.xml)

<env-entry> 
    <env-entry-name>myEnv</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>test</env-entry-value> 
</env-entry> 

, то вы можете получить значение в вашем веб-приложение, как это;

Context ctx = new InitialContext(); 
Context envCtx = (Context) ctx.lookup("java:comp/env"); 
String env = (String)envCtx.lookup("myEnv"); 
String props = "application-" + env + ".properties"; 
+0

Мне нравится это решение. Может быть, я должен был быть более ясным в вопросе, но это для набора веб-сервисов, упакованных как AAR. Я просто отправлю его на сервер Tomcat. Есть ли аналогичный способ делать то, что вы предлагаете, если я не запускаю проект напрямую? –

2

Добавить аргумент, указывающий конфигурационный файл!

+2

Согласен. Лучшим способом достижения этого является аргумент командной строки или свойство системы командной строки. –

0

Приближается использование файла свойств "manager manager". Файл основных свойств может передаваться как параметр в vm через аргумент jvm Но один недостаток этого процесса заключается в том, что файл основных свойств становится неуправляемым в течение определенного периода времени. Например, вы можете сохранить некоторые старые ссылки на файлы свойств, которые больше не имеют смысла.

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