#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 и устанавливаются в среду