Как загрузить свойства в среду из zookeeper перед инициализацией компонентов в веб-приложении

#java #spring #apache-zookeeper #web-application-design

#java #весна #apache-zookeeper #веб-приложение-дизайн

Вопрос:

Веб-приложение на основе Spring: существующее: контекст загружается из файла («web.xml «), а свойства, необходимые для приложения, загружаются из файла свойств, указанного в файле контекста xml.

Новое: теперь свойства должны считываться из zookeeper (вместе с файлом свойств). Требуемый java-код для чтения свойств выполняется с помощью ZookeeperPropertySource

Проблема: Куда мне нужно вставить код Java, чтобы свойства загружались из zookeeper вместе с инициализацией контекста приложения?

Я не могу добиться этого с помощью ApplicationEventListener (поскольку ContextStartedEvent не запускается автоматически) и BeanFactoryPostProcessor (среда недоступна для привязки свойств)

Ответ №1:

Решение:
создайте новый класс, расширяющий класс «ContextLoaderListener», и переопределите метод «WebApplicationContext createWebApplicationContext createWebApplicationContext (ServletContext sc)». Поскольку здесь будет доступен WebApplicationContext, ZookeeperPropertySource может быть настроен на среду.

Пример кода:

@Переопределить
защищенный WebApplicationContext createWebApplicationContext(ServletContext ServletContext) {
 WebApplicationContext WebApplicationContext = super.createWebApplicationContext(ServletContext);
 loadZookeeperPropertySource(WebApplicationContext.getEnvironment());
 возвращает WebApplicationContext;
}

loadZookeeperPropertySource (Окружающая среда) — это метод, при котором источники свойств загружаются из zookeeper с помощью ZookeeperPropertySourceLocator и устанавливаются в среду