我有两个问题:


Spring何时关闭由Spring容器创建的SessionFactory类(SessionFactory在容器中定义)?
默认情况下,Hibernate维护主缓存。缓存的范围是否限于会话或sessionFactory?我的意思是,什么时候主缓存的内存被释放?

最佳答案

Spring何时关闭由Spring容器创建的SessionFactory类(SessionFactory在容器中定义)?


当您关闭ApplicationContext(取消部署Web应用程序,正常关闭JVM等)时,它会自动完成。当容器关闭时,它将在所有bean上从destroy()接口调用DisposableBean方法。 LocalSessionFactoryBean中定义了此类方法之一:

public void destroy() {
    this.sessionFactory.close();
}


您完全不必为此烦恼。


  默认情况下,Hibernate维护主缓存。缓存的范围是否限于会话或sessionFactory?我的意思是,什么时候主缓存的内存被释放?


“主”高速缓存称为第一级高速缓存,并绑定到会话。二级缓存是SessionFactory全局的,但是在SessionFactory关闭时不会释放,因为您很可能正在使用某些外部缓存提供程序,例如ehcache。在这种情况下,还必须关闭EhCache才能释放该内存。但是,如果使用了EhCache支持,这也应该由Spring容器处理。

也可以看看


Caching with Hibernate + Spring - some Questions!

关于java - Spring HibernateTemplate session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10785249/

10-11 11:39