优雅地关闭 HibernateSessionFactory,意味着在整个应用生命周期结束时,确保资源被正确释放,避免内存泄漏或数据库连接未释放的问题。

正确方式如下:

if (sessionFactory != null) {
    sessionFactory.close();
}

更优雅的实践建议:

  1. 在应用退出时统一关闭
    • 在 Java SE 项目中,通常在 main() 方法结束前关闭: Runtime.getRuntime().addShutdownHook(new Thread(() -> { if (sessionFactory != null) { sessionFactory.close(); } }));
    • 在 Web 应用中,推荐在 Servlet 容器销毁时关闭,比如在 ServletContextListenercontextDestroyed() 方法中: @WebListener public class HibernateListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent event) { HibernateUtil.getSessionFactory().close(); } }
  2. 不要频繁创建和关闭 SessionFactory
    • 它是线程安全且重量级的对象,建议在应用启动时创建,关闭时再销毁。
  3. 使用单例模式管理 SessionFactory
    • 避免多处手动管理它的生命周期,降低资源管理复杂度。

总结:
优雅关闭 Hibernate 的关键是放在应用生命周期的适当位置(如 shutdown hook 或 context listener)中调用 SessionFactory.close() 方法,并确保只创建一次 SessionFactory