У меня есть кластер серверов, на которых запущено весеннее приложение. Некоторые пружинные компоненты должны быть настроены по-разному в зависимости от роли, которую играет их сервер (основной, дополнительный и т. Д.). Я не хочу поддерживать отдельные весенние конфигурационные файлы для каждой роли, а хочу динамически определять это при запуске приложения. Это почти как если бы я хотел создать экземпляр условного компонента (которого не существует весной).
Q: Каков наилучший способ настройки этого типа конфигурации?
Пример: Только основной узел в кластере должен создавать долговременную подписку для JMS-брокера (для которого требуется глобально уникальный JID clientID). Я могу определить, имеет ли текущий хост эту роль, посмотрев имя хоста работающего сервера в базе данных, и запустить этот контейнер вручную (если мой узел оказался основным); однако я не хочу, чтобы каждый узел в кластере создавал долговременную подписку (путем создания экземпляра этого компонента).
<bean id="auditrecordListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="1" />
<property name="clientID" value="${server-hostname}" />
<property name="durable" value="true" />
<!-- only started on the primary node: via application listener -->
<property name="autoStartup" value="false" />
</bean>
Обратите внимание, однако в контейнере Spring нет свойства $ {server-hostname} (по крайней мере, о котором я знаю)