Документация 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 для практических целей. Под прикрытием я думаю, что глобальный заполнитель использует эту технологию. Вот простые шаги, которые работают для меня:

  1. В mule-project.xml создайте переменную mule.env, имеющую значение, например, dev или qa. переменная mule-project-xml
  2. Выберите свой проект xml, перейдите на вкладку "Глобальные элементы" и создайте заполнитель глобального свойства.

глобальный элемент-заполнитель

  1. Установите местоположение:

    $ {} mule.env.properties

  2. Создайте файл qa.properties в /src/main/app и определите свойства:

    mule.env.host = локальный

    mule.env.port=8082

  3. Создайте файл dev.properties в src / main / app и определите свойства:

    mule.env.host = локальный

    mule.env.port=8081

  4. В конфигурации прослушивателя 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>
Другие вопросы по тегам