【问题标题】:Spring Hibernate SessionFactory.getCurrentSession in multithreaded environment多线程环境中的 Spring Hibernate SessionFactory.getCurrentSession
【发布时间】:2015-03-05 19:58:40
【问题描述】:

我编写了一个批处理应用程序,它产生多个线程来读取分配的文件并将记录保存到数据库。该架构使用 Spring 上下文和 Hibernate。

事务由 Spring 管理,我使用 SessionFactory.getCurrentSession 获取会话以对每个线程执行保存操作。

考虑到我有一个处理获取、保存、更新操作的通用 DAO 和一个隐藏 Hibernate 实现的外观,我如何确保调用 SessionFactory.getCurrentSession() 时两个线程正在获取它们的专用 Session 对象来执行 DB 操作。

我在 StackOverflow 中发现了一个帖子,有人建议在使用 Spring 托管事务时不要使用 current_session_context_class=thread。 Spring 对current_session_context_class 属性使用的默认实现是什么?

提前致谢!

【问题讨论】:

    标签: multithreading spring hibernate sessionfactory


    【解决方案1】:

    从 Spring 2.0 开始,Spring 通过 hibernate 提供的 CurrentSessionContext 接口的自己实现与 hibernate 集成。

    默认情况下,spring 将此设置为SpringSessionContext 以正确集成。通常,除非您使用 JTA,否则您不希望或不需要弄乱current_session_context_class(尽管在使用带有最新 Spring 版本的 Hibernate 4 时,它也应该可以正常工作)。

    【讨论】:

    • 所以在tomcat中使用多线程时SessionFactory.getCurrentSession可以吗?每个线程都会有自己的会话?
    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多