Документация Mule PlaceHolder не так?
Я искал, как правильно использовать свойства для развертывания в нескольких средах... но пример не работает: URL: https://docs.mulesoft.com/mule-user-guide/v/3.8/deploying-to-multiple-environments
Я создал проект с настроенным http, как показано в примере:
<http:listener-config name="HttpListenerConfiguration"
doc:name="HTTP Listener Configuration"
host="${mule.env.host}"
port="${mule.env.port}"
basePath="${mule.env.basePath}" />
Где они говорят
В этом примере используется механизм разрешения заполнителя свойства Spring. Переменные биты хорошо видны: базовый путь, хост и порт могут различаться для каждой среды, в которой развернут этот соединитель. При развертывании приложения mule.env может быть динамически заменен конкретной средой, в которой вы развертываете, например как QA или Prod.
Я создал файл в java/main/resources с именем config.properties:
dev.basePath=test/products
dev.host=localhost
dev.port=8082
prod.basePath=products
prod.host=www.acme.com
prod.port=8081
и установить заполнитель:
<context:property-placeholder location="config.properties"/>
мои mule-app.properties:
mule.env=dev
Когда я запускаю его в AS:
[Could not resolve placeholder 'mule.env.host' in string value "<http:listener-config name="ejemplop....]
если я изменю значение с:
${mule.env.host} to ${${mule.env}.host}
и атрибут хоста работает, но если я делаю то же самое с портом
(${${mule.env}.port}
дай мне ошибку
[..${${mule.env}.port}' is not a valid value of union type 'substitutableInt'....]
но если я добавлю в свой файл свойств
env.port=${${mule.env}.port}
и измените разъем на:
<http:listener-config name="HttpListenerConfiguration"
doc:name="HTTP Listener Configuration"
host="${${mule.env}.host}"
port="${env.port}"
basePath="${mule.env.basePath}" />
это работает. Есть причудливый или правильный способ сделать это?
2 ответа
CHo, вы движетесь в направлении нескольких сред, но пока не совсем. Что я хотел бы предложить, если вам нужно несколько файлов свойств, каждый из которых имеет одинаковые свойства с одинаковыми именами, но специфичными для среды значениями.
В вашем приложении у вас будет что-то вроде:
<context:property-placeholder location="config_${mule.env}.properties"/>
Тогда в вашем потоке вы бы имели:
<http:listener-config name="HttpListenerConfiguration"
doc:name="HTTP Listener Configuration"
host="${host}"
port="${port}"
basePath="${basePath}" />
Затем у вас будет файл свойств с именем config_dev.properties, и в нем вы получите:
basePath=test/products
host=localhost
port=8082
У вас будет другой файл свойств с именем config_prod.properties с:
basePath=products
host=www.acme.com
port=8081
Когда mule.env установлен в dev, будут использоваться значения config_dev. Когда установлено значение prod, используются значения config_prod.
Я думаю, что вы можете игнорировать упоминание о Spring для практических целей. Под прикрытием я думаю, что глобальный заполнитель использует эту технологию. Вот простые шаги, которые работают для меня:
- В mule-project.xml создайте переменную mule.env, имеющую значение, например, dev или qa.
- Выберите свой проект xml, перейдите на вкладку "Глобальные элементы" и создайте заполнитель глобального свойства.
Установите местоположение:
$ {} mule.env.properties
Создайте файл qa.properties в /src/main/app и определите свойства:
mule.env.host = локальный
mule.env.port=8082
Создайте файл dev.properties в src / main / app и определите свойства:
mule.env.host = локальный
mule.env.port=8081
В конфигурации прослушивателя HTTP установите хост и порт следующим образом:
$ {Mule.env.host}
$ {Mule.env.port}
Когда вы запускаете приложение, используя переменную среды qa, начиная с шага 1, вы запускаете приложение с порта 8081. Измените переменную среды на dev и повторно разверните приложение. Теперь вы запускаете приложение с порта 8082.
Вот пример XML:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:context="http://www.springframework.org/schema/context" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd">
<context:property-placeholder location="${mule.env}.properties"/>
<http:listener-config name="HTTP_Listener_Configuration" host="${mule.env.host}" port="${mule.env.port}" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration" host="jsonplaceholder.typicode.com" port="80" doc:name="HTTP Request Configuration"/>
<flow name="myprojectFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="/users" method="GET" doc:name="HTTP"/>
</flow>
</mule>