Ссылка на файл динамических свойств Mule

#mule #mule-component

#mule #mule-компонент

Вопрос:

у нас есть поток, в котором у нас есть ссылка на файл свойств, как указано ниже

 "context:property-placeholder location="httpdemo.${country}.properties"
  

теперь мы хотим ${country} , чтобы значение было заменено фактическим значением во время развертывания.

Как мы знаем, один из способов добиться этого — установить значение country в качестве переменной среды в ESB и развернуть его. Но мы не хотим этого делать по следующим причинам:

  1. Мы параллельно развертываем одну и ту же кодовую базу для нескольких стран

  2. Свойства среды могут быть установлены только во время запуска среды выполнения mule, поэтому, если я установил переменную env как country=UK и развернул для Великобритании. Позже я снова захочу развернуть для СВОЕГО, мне нужно перезапустить ESB, установив country=MY , что мы не хотим делать.

Пожалуйста, дайте мне знать, если есть какой-либо другой лучший способ

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

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

Ответ №1:

У нас была похожая ситуация, когда нам нужно было иметь несколько версий одного и того же приложения, работающих параллельно. Решение, которое мы использовали для этого, заключалось в том, чтобы упаковать файл свойств вместе со сборкой и не добавлять к нему динамический элемент (основанный на среде). Например; в этом случае мы создаем httpdemo.usa.properties и упаковываем его вместе с приложением. Это было довольно легко для нас, поскольку мы используем Jenkins для управления нашими сборками и выпусками. Когда сборка выпущена, мы ссылаемся на файл конфигурации от Jenkins, который содержит все конкретные свойства, связанные со «страной». Вы даже можете передать эту страну в качестве параметра в определение сборки. Используя пользовательский плагин maven, мы заменяем файл свойств в приложении новыми свойствами из файла свойств Дженкинса.

Другим решением вашей проблемы может быть соблюдение соглашения об именовании для ваших приложений, специфичных для «страны», которую вы хотите использовать, и получение свойств с помощью spring beans. Например;

 <spring:beans>
    <spring:bean id="CountryProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <spring:property name="singleton" value="true"/>
        <spring:property name="location" value="${app.name}.properties"/>
    </spring:bean>
</spring:beans>
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="5000" doc:name="HTTP Listener Configuration"/>
<flow name="dynamic_propsFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
    <logger message="#[app.registry.CountryProperties['country.full.name']]" level="INFO" doc:name="Logger"/>
</flow>
  

Мои свойства такие, как показано ниже:

 File - dynamic_props_usa.properties
population=10
country.full.name=united.states.of.america

File - dynamic_props_mexico.properties
population=100
country.full.name=mexico
  

${app.name } дает вам имя развернутого приложения. В случае, если мое приложение называется dynamic_props_usa, оно ссылается на dynamic_props_usa.properties . Если это dynamic_props_mexico, он ссылается на dynamic_props_mexico.properties . Надеюсь, это поможет!

Ответ №2:

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

 <context:property-placeholder location="classpath:app-${mule.env}.properties,    file:${mule.config.path}/app-${mule.env}.properties" ignore-resource-not-found="true" ignore-unresolvable="true" />
  

Ответ №3:

Вы можете запустить локальный сервер Mule с опцией -M-Dmule.country=your-value

Возможно, вы захотите ознакомиться с документацией