2016-10-03 5 views
0

мы имеем поток, где мы имеем ссылку на файл свойств, как указано нижеMule динамическое свойство ссылка на файл

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

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

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

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

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

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

+0

В примере вы дали или содержите слишком много цитат или слишком мало кавычек, если вы добавили их для StackOverflow. Пожалуйста, отредактируйте и исправьте его форматированием кода. – techraf

ответ

-1

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

Вы можете взглянуть на the documentation

0

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

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

<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. Надеюсь это поможет!

0

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

<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" /> 
Смежные вопросы