在Web应用程序中初始化bean之前如何从Zookeeper将属性加载到环境中

时间:2019-04-08 15:17:47

标签: java spring apache-zookeeper web-application-design

基于Spring的Web应用程序: 现有:上下文是从file(“ web.xml”)中加载的,应用程序所需的属性是从xml上下文文件中引用的属性文件中加载的。

新功能:现在应该从zookeeper中读取属性(以及属性文件)。使用ZookeeperPropertySource完成读取属性所需的Java代码

问题:我需要在哪里插入Java代码,以便与应用程序上下文的初始化一起从zookeeper加载属性?

我无法使用ApplicationEventListener(因为ContextStartedEvent不会自动触发)和BeanFactoryPostProcessor(环境无法绑定属性)来实现此目的

1 个答案:

答案 0 :(得分:0)

解决方案:
创建一个扩展“ ContextLoaderListener”类的新类,并覆盖方法“ WebApplicationContext createWebApplicationContext(ServletContext sc)”。由于WebApplicationContext将在此处可用,因此ZookeeperPropertySource可以设置为环境。

示例代码:

@Override
protected WebApplicationContext createWebApplicationContext(ServletContext servletContext) {
    WebApplicationContext webApplicationContext = super.createWebApplicationContext(servletContext);
    loadZookeeperPropertySource(webApplicationContext.getEnvironment());
    return webApplicationContext;
}

loadZookeeperPropertySource(环境环境)是一种使用ZookeeperPropertySourceLocator从Zookeeper加载属性源并将其设置为环境的方法