我有两个问题:
- Spring 什么时候关闭 Spring Container 创建的 SessionFactory 类(SessionFactory 是在容器中定义的)?
- Hibernate 默认维护主缓存。缓存的范围是否仅限于会话或 sessionFactory?我的意思是,主缓存的内存什么时候释放?
Spring 什么时候关闭 Spring Container 创建的 SessionFactory 类(SessionFactory 是在容器中定义的)?
当您关闭ApplicationContext
(取消部署 Web 应用程序,正常关闭 JVM 等)时,它会自动完成。当容器关闭时,它会从所有 bean 的接口调用destroy()
方法。DisposableBean
其中一种方法定义在LocalSessionFactoryBean
:
public void destroy() {
this.sessionFactory.close();
}
您根本不必为此烦恼。
Hibernate 默认维护主缓存。缓存的范围是否仅限于会话或 sessionFactory?我的意思是,主缓存的内存什么时候释放?
“主”缓存称为一级缓存,与会话相关联。二级缓存是全局的SessionFactory
,但是在关闭时它不会被释放,SessionFactory
因为很可能您正在使用一些外部缓存提供程序,例如ehcache。如果是这种情况,EhCache 也必须关闭以释放该内存。但是如果使用 EhCache 支持,这也应该由 Spring 容器处理。