Mule ESB: Контекст Property Placeholder
У меня есть вопрос относительно заполнителя свойств контекста Mule, у меня есть два файла, настроенные следующим образом:
<context:property-placeholder location="classpath:mule-app-1.properties, file:///etc/mule/conf/mule-app-2.properties" />
Во-первых, это действительная конфигурация, во-вторых, какой файл будет иметь приоритет над другим? app1 или app2?
-S
Ответы
Ответ 1
Каждый будет загружен по очереди, перезаписывая повторяющиеся свойства из первого. Таким образом, в вашем случае свойства, определенные в mule-app-2.properties, будут иметь приоритет.
В конце в этой статье Я описал этот метод для предоставления свойств конфигурации, специфичных для среды.
Ответ 2
Да, вы можете иметь несколько файлов, загружаемых через заполнитель свойств контекста Mule. Правильный способ сделать это - поместить файл свойств в src/main/resources
, эта папка находится в пути к классам и затем указать что-то вроде этого:
<context:property-placeholder location="mule-app-1.properties, mule-app-2.properties" />
Я не уверен, почему вы хотите определить в них повторяющиеся свойства.
EDIT:
Чтобы указать порядок загрузки нескольких файлов, используйте атрибут order
:
<context:property-placeholder location="mule-app-1.properties" order="1"/>
<context:property-placeholder location="mule-app-2.properties" order="2"/>
Ответ 3
Ваша конфигурация должна быть следующей:
<context:property-placeholder location="mule-app.properties, file:C://Users//schiraboina//Desktop//123.txt"/>
В приведенном выше примере вы пытаетесь прочитать значения с помощью "$ {key_name}". Порядок приоритета будет
1. mule-app.properties
2. Чтение файла из внешнего местоположения
Ответ 4
Я также сталкивался с одним и тем же сценарием. Ниже приводится результат моего практического опыта:
-
Если оба файла существуют либо внутри проекта, либо на сервере, оба будут загружаться во время запуска проекта/приложения. Если файлы недоступны, он будет генерировать исключение (java.io.FileNotFoundException: система не может найти указанный файл) во время запуска приложения.
-
Весьма интересно использовать несколько файлов свойств и знать приоритет. В этом случае оба файла свойств будут загружены и, следовательно, свойства, определенные внутри обоих файлов, будут загружены в течение времени выполнения. Однако mule всегда отдает предпочтение последнему объявленному файлу в случае, если в обоих файлах определены одни и те же свойства, и дополнительный атрибут, например order, не был определен.
Например, если в объявлении есть свойство "db.dbname = test_university"
"mule-app-1.properties" и "db.dbname = university" внутри "mule-app-2.properties" , затем ${db.dbname} внутри config xml загрузит "университет"
Ответ 5
За дополнительной информацией по этому вопросу. Данные будут прочитаны, давая первое предпочтение данным в CLASSPATH, тогда данные в файле будут прочитаны!
Ответ 6
Spring будет загружать свойства из каждого ресурса поочередно, переопределяя свойства, когда он найдет их более одного раза. Это позволяет вам предоставлять значения по умолчанию для свойств и настраивать их для каждой среды.
Например,
<context:property-placeholder
location="classpath:myapp-config.properties,classpath:myapp-config-${MULE_ENV}.properties,file:/opt/mule/conf/${MULE_ENV}/myapp-config.properties"
ignore-resource-not-found="true"
ignore-unresolvable="true" />
Это очень похоже на то, что вы упомянули выше, и ответить на ваш вопрос:
- Синтаксис отлично. Никакое исключение не будет выбрано.
- Mule-app-22.properties будет иметь приоритет над mule-app-1.properties.
Обратитесь к этой ссылке для получения дополнительной информации:
http://confluex.com/blog/integration-software-is-software/
Ответ 7
Тим Хеннеки
Этот пример можно использовать для MULE с Spring:
<spring:bean id="property-placeholderInstance" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" name="Bean">
<spring:property name="locations">
<spring:list>
<spring:value>file:${mule.home}/conf/PropertyFile1.properties</spring:value>
<spring:value>file:${mule.home}/conf/PropertyFile2.properties</spring:value>
</spring:list>
</spring:property>
</spring:bean>