Верблюд и указание файла свойств без хардкодинга

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

Насколько я понимаю, в Karaf рекомендуется использовать свойство-заполнитель для данных конфигурации. который будет искаться в папке ../karaf/ect.

Хорошо, так как у нас нет фиксированного закодированного пути. У меня эта часть работает.

<blueprint ...
    <cm:property-placeholder persistent-id="org.example.project" update-strategy="reload" id="prop">
        ...
    </cm:property-placeholder>

    <camelContext id="myCamelContext" xmlns="http://camel.apache.org/schema/blueprint">
        <route id="watchfolder">
            <from uri="file:{{ENDPOINT.IN}}"/>
            <to uri="direct:test"/>
        </route>

../karaf/ect/org.example.project.cfg файл:

ENDPOINT.IN=C:/Users/username/Documents/project/folderwatch

В camelContext у нас также есть возможность использовать свойствоPlaceholder. Работает, если я определяю это так

...
            <propertyPlaceholder id="properties" location="file:C:/Users/username/Documents/project/camel.properties" />
...

и переместил свойство в файл C:/Users/username/Documents/project/camel.properties.

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

Я хотел бы сделать это, что не работает:

...
        <propertyPlaceholder id="properties" location="file:{{CAMEL.PROPERTIES_FILE}}" />
...

../karaf/ect/org.example.project.cfg файл:

CAMEL.PROPERTIES_FILE=C:/Users/username/Documents/project/camel.properties

Результат:

..
Caused by: java.io.FileNotFoundException: {{CAMEL.PROPERTIES_FILE}} (The system cannot find the file specified)
..

Кажется, что значение не анализируется как свойство. Я пробовал такие варианты, как:

location="file:${CAMEL.PROPERTIES_FILE}" 
location="file:{{blueprint:CAMEL.PROPERTIES_FILE}}" 
location="file:{{blueprint:prop:CAMEL.PROPERTIES_FILE}}" 

(Эти последние попытки были просто азартными играми. Я не понял смысла этой функциональности)

Итак, в конечном итоге, вопрос:

Как указать переменный файл свойств верблюда?

Я использую: Караф 4.0.0, Верблюд 2.15.3, Win7


person PleaseCompile    schedule 26.11.2015    source источник
comment
Зачем вводить второй файл конфигурации, если у вас уже есть файл blueprint cfg? Просто поместите все свои свойства в файл cfg и используйте ${my.property} вне контекста верблюда и {{another.property}} внутри контекста верблюда, чтобы заменить указанные ключи значением из файла cfg.   -  person Ralf    schedule 31.12.2015


Ответы (1)


Есть два способа сделать это

<propertyPlaceholder id="properties" location="${env:PROP_FILE_OS_ENV_LOC}"/>

где PROP_FILE_OS_ENV_LOC — переменная окружения ОС

<propertyPlaceholder id="properties" location="${PROP_FILE_JVM_LOC}"/>

где PROP_FILE_JVM_LOC — свойство JVM.

person Sundar    schedule 04.01.2016