基于Spring的Web应用程序: 现有:上下文是从file(“ web.xml”)中加载的,应用程序所需的属性是从xml上下文文件中引用的属性文件中加载的。
新功能:现在应该从zookeeper中读取属性(以及属性文件)。使用ZookeeperPropertySource完成读取属性所需的Java代码
问题:我需要在哪里插入Java代码,以便与应用程序上下文的初始化一起从zookeeper加载属性?
我无法使用ApplicationEventListener(因为ContextStartedEvent不会自动触发)和BeanFactoryPostProcessor(环境无法绑定属性)来实现此目的
答案 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加载属性源并将其设置为环境的方法