Как настроить динамические свойства при загрузке spring?

Я планирую использовать Spring Boot для моего назначения. Это типичное серверное приложение с подключением к базе данных. Я знаю, что могу использовать Spring Конфигурация для экстернализации моих свойств, например. db подробности подключения. Но у меня также есть другие динамические свойства, которые необходимо обновить во время выполнения. например флипсы/флаги функций. Некоторые функции моего приложения должны управляться динамически, например. представьте себе свойство, подобное app.cool-feature.enable = true, а затем через некоторое время одна и та же функция будет отключена с помощью app.cool-feature.enable = false

Любые предложения, что является наилучшей практикой во время проглатывания такого динамического поведения во время выполнения? Я могу думать о следующих вариантах, чтобы вызвать изменение...

  • Отправьте сообщение JMS экземпляру сервера с изменением свойства выше.
  • Вызов открытой конечной точки API на экземпляре сервера, например. POST http://myapp/admin/config/update { "config": { "app.cool-feature.enable": true } }

Я знаю, что могу написать собственный собственный код, реализующий это (это будет в третий раз), но просто интересно, существует ли уже стандартный способ/общая практика вокруг динамических конфигураций свойств, о которых я не знаю. Также было бы здорово, если бы он мог работать с другими решениями, такими как Apache ZooKeeper, coreos etcd, куратором Netflix и т.д. И иметь тесную интеграцию с Spring.

Мысли?

Ответ 1

Если вы используете Spring boot, посмотрите @ConfigurationProperties. Вам необходимо предоставить Bean для доступа к вашим свойствам. Поэтому исходные значения свойств могут быть изменены во время выполнения, поскольку они являются регулярными свойствами bean.

В вашем случае, например:

@Component
@ConfigurationProperties
public class JmsProperties {

    private String url = "vm://localhost" (let suppose you use ActiveMQ);

    public String getUrl()...
    public void setUrl(String value)...

}

И затем введите этот Bean в JMS-прослушиватель сообщений.

Конечно, если вы используете JMS и Spring boot, с автоконфигурацией у вас уже есть класс свойств...

Ответ 2

Ваше требование - хороший прецедент для "Spring Cloud Config", где вы можете не только иметь все ваши конфигурации в центре, но и обновлять их динамически и которые, в свою очередь, могут быть выбраны вашим приложением для ссылок с самого следующий момент. См. Этот стандарт spring ссылка для этого.

Ответ 3

Возможно, вы захотите взглянуть на Togglz: www.togglz.org

На главной странице:

Togglz - это реализация шаблона Feature Toggles для Java. Функция Toggles - это очень распространенная гибкая технология разработки в контексте непрерывного развертывания и доставки. Основная идея - связать переключатель с каждой новой функцией, над которой вы работаете. Это позволяет включать или отключать эти функции во время выполнения приложения, даже для отдельных пользователей.

Togglz не привязан к структуре spring, но поддерживает его.