Mule: указание свойств коннектора в файле flow.xml с использованием свойств bean-компонента Spring.

Работа над мул-приложением, в котором необходимо указать свойства коннектора из централизованной базы данных. Подход, который я использую, заключается в сборе данных из базы данных в bean-компоненте, имеющем неизменяемую карту, в начале контекста spring. Как я могу указать свойства элементов потока, используя свойство хэш-карты spring bean в Mule.

<file:inbound-endpoint path="#[applicationConfig.configMap['mydestination']]"/>

где applicationConfig — это Spring bean, существующий в spring-context.xml (отличный от flow.xml), имеющий configMap hashMap, заполненный из базы данных, и имеющий ключ mydestination, имеющий значение для конечной точки входного файла. Это правильный способ или есть какой-то другой способ получить однократную настройку элементов потока из базы данных.


person NAZAR REHMAN    schedule 30.12.2014    source источник


Ответы (4)


Компоненты Spring, определенные в потоках мулов, регистрируются в MuleRegistry. Попробуйте что-то похожее на следующее:

<file:inbound-endpoint path="#[app.registry.applicationConfig.getConfigMap().get('mydestination')"/>

Однако не гарантируется, что bean-компонент applicationConfig будет зарегистрирован при создании конечной точки файла.

Надеюсь, поможет.

person Nuno    schedule 30.12.2014

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

Это очень распространенный сценарий, у вас есть несколько вариантов, но проще всего использовать существующий заполнитель свойства Spring, который затем можно использовать с ${myPropertyName}. См. здесь и здесь руководство о том, как сделать именно то, что вы хотите сделать но используя программное обеспечение с открытым исходным кодом zuul, а не специально созданную базу данных. Если это соответствует вашим потребностям, я бы пошел по этому пути.

person Víctor Romero    schedule 30.12.2014
comment
Мне нужно собирать данные конфигурации из базы данных, а не из файла .properties, и это тоже только при запуске службы мулов, а затем ссылаться на эти данные конфигурации в файле flow.xml для свойств соединителя и других компонентов. Помимо реестра, есть еще какие-то способ ссылаться на данные конфигурации, собранные в bean-компонентах spring, или, если не в bean-контексте spring, чем в java-бине при запуске службы в потоке.xml. - person NAZAR REHMAN; 30.12.2014
comment
Я не совсем уверен, понял ли я вас. Почему подход zuul недействителен? - person Víctor Romero; 30.12.2014

У меня были те же требования к PoC, что и у нас, и я создал Spring JDBC Placeholder Configurer.

Используя этот конфигуратор заполнителей, вы можете загружать свойства для любого источника данных JDBC с помощью собственного пользовательского оператора SQL и использовать обычные заполнители spring ${propertyName} в потоке xml.

<bean class="com.redpill_linpro.springframework.beans.factory.config.JdbcPlaceholderConfigurer">
        <property name="dataSource" ref="dataSource" />
        <property name="selectStatement" value="SELECT value FROM properties WHERE key = ?" />
</bean>

Проект еще недоступен на Maven Central, поэтому вам придется собрать его и установить в свой собственный репозиторий maven.

person Pontus Ullgren    schedule 30.12.2014

Я добился использования свойства хеш-карты spring beans в муле flow.xml, импортировав springcontext.xml в flow.xml . Код

<spring:beans>
    <spring:import resource="classpath:src/main/resources/spring-context.xml"/>
   </spring:beans>  

    <file:inbound-endpoint  path="#{applicationConfig.configMap['mydestination']}" doc:name="File"/>
person NAZAR REHMAN    schedule 01.01.2015