优雅地关闭 Hibernate 的 SessionFactory
,意味着在整个应用生命周期结束时,确保资源被正确释放,避免内存泄漏或数据库连接未释放的问题。
正确方式如下:
if (sessionFactory != null) {
sessionFactory.close();
}
更优雅的实践建议:
- 在应用退出时统一关闭
- 在 Java SE 项目中,通常在
main()
方法结束前关闭:Runtime.getRuntime().addShutdownHook(new Thread(() -> { if (sessionFactory != null) { sessionFactory.close(); } }));
- 在 Web 应用中,推荐在 Servlet 容器销毁时关闭,比如在
ServletContextListener
的contextDestroyed()
方法中:@WebListener public class HibernateListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent event) { HibernateUtil.getSessionFactory().close(); } }
- 在 Java SE 项目中,通常在
- 不要频繁创建和关闭
SessionFactory
- 它是线程安全且重量级的对象,建议在应用启动时创建,关闭时再销毁。
- 使用单例模式管理
SessionFactory
- 避免多处手动管理它的生命周期,降低资源管理复杂度。
总结:
优雅关闭 Hibernate 的关键是放在应用生命周期的适当位置(如 shutdown hook 或 context listener)中调用 SessionFactory.close()
方法,并确保只创建一次 SessionFactory
。