ApplicationContextInitializer 的关闭等效项

Eng*_*_DJ 5 java spring apache-zookeeper apache-curator

如何彻底关闭ApplicationContextInitializer实施中使用的资源?

我创建了一个ApplicationContextInitializer使用 Curator 项目连接到 Zookeeper 并获取属性文件的实现。然后它创建一个Properties实例 aPropertiesPropertySource并将其添加到上下文中。

当应用程序关闭时,我希望能够调用属于我的初始化程序成员的实例close()CuratorFramework如何最好地做到这一点?

我是否也可以将CuratorFramework实例传递上下文中,以便我可以将其用作 bean?

Mat*_*fek 6

在您的 中ApplicationContextInitializer,您可以添加ApplicationListener<ContextClosedEvent>

class MyContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        @Override
        public void initialize(ConfigurableApplicationContext applicationContext) {

            applicationContext.addApplicationListener(new ApplicationListener<ContextClosedEvent>() {
                @Override
                public void onApplicationEvent(ContextClosedEvent event) {
                    /* Cleanup code */
                }
            });
        }
    }

Run Code Online (Sandbox Code Playgroud)


sbr*_*ges 1

我将创建一个获取春季事件的 bean,并用它来关闭 curator,

public class CuratorDisposer implements DisposableBean { 
    private CuratorFramework delegate; //set through spring somehow

    public void destroy() {
          delegate.close();
    }  
}
Run Code Online (Sandbox Code Playgroud)